据我所知,nohup可以保持流程运行而不关心终端的退出.但是我发现当我在后台运行一个进程(没有nohup)时最后使用&符号(&),然后退出终端,我仍然可以找到在该机器上运行的进程.
这是一个简单的例子; 我运行以下命令,然后退出终端:
ping localhost &
Run Code Online (Sandbox Code Playgroud)
但是,我发现"ping"进程仍在机器中运行,即使我没有nohup在这里使用.我误解了它nohup的真实用法吗?
从您的会话注销后,您看到您的进程仍在运行的原因是,您的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并检查您的进程是否仍在运行.