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
,即没有背景等。在运行您指定的命令之前,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)
这还有一些其他副作用,可能对您来说可能是问题,也可能不是问题,例如丢失原始父进程信息并且不等待进程完成。