为什么需要“nohup”

为什么需要“nohup”

我必须通过 SSH 启动一个持续时间相当长的脚本(它可以运行半小时或更长时间),并收集其 StdOut/StdErr 和返回代码。

我想避免在同一个 SSH 会话中等待进程结束,因为它会占用服务器上的资源,并且会话可能会因网络问题而关闭,所以想法是启动进程,断开会话,稍后再检查结果。

我认为这会涉及到nohup,但如果我在 ssh 会话中执行此操作:

(somelongrunningscript.sh >test.out 2>test.err; echo $? >test.rc) & exit 0

会话关闭后脚本继续运行。如果我不使用子 shell,它也会继续运行:

somelongrunningscript.sh >test.out 2>test.err & exit 0

(但是我无法收集返回代码)。

那么为什么脚本在没有 提供的保护的情况下仍然运行呢nohup?我错过了什么吗?我只是幸运吗?

相关内容