如何执行 sudo + exec?

mvo*_*sek 5 shell bash sudo exec

我需要用来sudo以不同的用户身份运行进程。但如何使用sudo类似exec

sudo -u www-data exec php -r 'sleep(2); echo 5;'
Run Code Online (Sandbox Code Playgroud)

替换 sudo 进程?

为什么和要求?

  • 最小化总进程数
  • 命令是连续启动的,不可能一次性启动它们sudo
  • 该解决方案需要表现得像没有exec,即没有背景等。

Jon*_*lin 2

在运行您指定的命令之前,Sudo 会分叉(编辑:并非总是如此,请参阅我的其他答案)。您不能使用 exec 撤消分叉。当在 bash 中使用 exec 时,它完全避免了 fork,这就是它在 bash 中工作的原因 - sudo otoh 没有此功能。但是,您可以像这样解决问题,将程序分叉到后台,然后退出中间进程:

sudo -u www-data bash -c "php -r 'sleep(2); echo 5;' &"
Run Code Online (Sandbox Code Playgroud)

这还有一些其他副作用,可能对您来说可能是问题,也可能不是问题,例如丢失原始父进程信息并且不等待进程完成。