它们之间有什么区别吗?一些特殊的用例会使它们中的一个比另一个更好?
答案1
一般来说,如果命令不需要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 $$
当我运行nohup /tmp/test1.sh
输出(存储在 nohup.out 中)时:
test
这意味着kill -HUP $$
被 nohup 拦截了。