我想以root用户身份运行服务进程,因为守护进程可能有自己的用户。
但是当我使用system("su - root c ./testbin")
运行它时,系统显示两个进程(我通过ps aux | grep testbin
检查):
su - root c ./testbin
和
./testbin
如何实现单一流程?
答案 0 :(得分:1)
无法避免“su”过程,但您可以在testbin之前完成它。 使用“睡眠”的原始问题如下所示:
(su - root -c "sleep 120" &) ; ps aux | grep sleep
如果多次执行该行,您将看到grep导致的多个“su”进程。 背景化子进程允许su进程结束,如下所示:
(su - root -c "sleep 120 &" &) ; ps aux | grep sleep
当您多次执行该行时,您可以看到“su”进程从列表中消失,但睡眠命令仍在继续。
请注意,双引号内的&符号用于子进程,而括号前面的符号用于'su'命令,这是在一行中执行问题所需的,并加快测试这种情况。 / p>
我检查了命令行是否存在等效的'execv',但似乎并非如此。此外,'su'是一个使用调用者的权限运行的进程,su的子进程运行时使用'su'分叉的进程的权限。对于我来说,出于安全原因,你不能用“孩子”替换“su”过程,因为“execv”在'C'中做了。
答案 1 :(得分:0)
ps aux | grep testbin | grep -v grep
我认为你只是看到了你的“grep”过程。使用上面的命令。