在运行带有&符号的流程背景时,nohup无效?

vmc*_*oud 1 linux nohup

据我所知,nohup可以保持流程运行而不关心终端的退出.但是我发现当我在后台运行一个进程(没有nohup)时最后使用&符号(&),然后退出终端,我仍然可以找到在该机器上运行的进程.

这是一个简单的例子; 我运行以下命令,然后退出终端:

ping localhost &
Run Code Online (Sandbox Code Playgroud)

但是,我发现"ping"进程仍在机器中运行,即使我没有nohup在这里使用.我误解了它nohup的真实用法吗?

Nay*_*rhc 6

从您的会话注销后,您看到您的进程仍在运行的原因是,您的shell可能不会在注销时发送sighup.您可以通过运行确认:

shopt | grep hupon 
Run Code Online (Sandbox Code Playgroud)

我假设它将返回类似huponexit off......

每个Linux/shell都不能保证这样做,所以为了保持安全并让你的脚本可移植,我建议使用nohup.例如

nohup ping localhost &
Run Code Online (Sandbox Code Playgroud)

要确认您还可以huponexit通过运行启用

shopt -s huponexit
Run Code Online (Sandbox Code Playgroud)

然后在没有的情况下运行命令nohup,注销/退出shell并检查您的进程是否仍在运行.