它们之间有什么区别吗?一些特殊的用例会使它们中的一个比另一个更好?
一般来说,如果命令不需要root特权,您就不会以 user 身份运行它root。
始终尝试以最少的权限执行。想象一下,其中存在一个错误<command>,允许攻击者注入代码,并以调用的用户的权限执行<command>。
错误:但是,在这种特定情况下,我认为可以防止,而不是nohup sudo <command>中的挂断。所以我会选择。sudo<command>sudo nohup <command>
编辑:事实上,根据man fork,子进程的任何信号都由父进程继承,这似乎nohup也有影响。感谢斯蒂芬·基特提到这一点。
这样你就可以快乐的奔跑了nohup sudo <command>。
编辑:实际上,我创建了以下测试用例:
$ cat /tmp/test1.sh /tmp/test2.sh
#!/bin/sh
/tmp/test2.sh &
sleep 5
#!/bin/sh
echo "test"
kill -HUP $$
Run Code Online (Sandbox Code Playgroud)
当我运行nohup /tmp/test1.sh输出(存储在 nohup.out 中)时:
test
Run Code Online (Sandbox Code Playgroud)
这意味着kill -HUP $$被 nohup 拦截了。