使用`su - user c`在Linux中以另一个用户身份运行命令会创建一个重复的进程

时间:2016-06-01 06:58:02

标签: linux process debian su

我想以root用户身份运行服务进程,因为守护进程可能有自己的用户。

但是当我使用system("su - root c ./testbin")运行它时,系统显示两个进程(我通过ps aux | grep testbin检查):

su - root c ./testbin

./testbin

如何实现单一流程?

2 个答案:

答案 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”过程。使用上面的命令。