我有一个脚本可以使用nohup my_app &
启动另一个应用程序,但是当初始脚本消失时,启动的进程也会停止运行。根据我的理解,因为它已经与nohup
一起运行,不应该发生。原始脚本也用nohup调用。
那里出了什么问题?
答案 0 :(得分:1)
nohup并不意味着(父)进程被杀死时(子进程)仍在运行。 nohup用于f.e.当您通过ssh连接到服务器并启动进程时。如果你注销,进程将终止(注销信号SIGHUP到进程导致进程终止),使用nohup避免这种行为,当你注销时你的进程仍然在运行。
如果你需要一个在后台运行的程序,即使它的父进程已经终止尝试使用守护进程。
答案 1 :(得分:1)
一个非常可靠的脚本已成功使用多年,并且在调用nohup后总是终止使用此构造:
nohup $ {BinDir} / $ {Watcher}> $ {DataDir} / $ {Watcher} .nohup.out 2>& 1&
问题可能是输出没有被管理?
答案 2 :(得分:0)
这取决于my-app
的作用 - 它可能会设置自己的信号掩码。您可能知道nohup
忽略挂断信号SIGHUP,这是目标程序继承的。如果该目标程序执行自己的信号处理,则可能将SIGHUP设置为,例如SIG_DFT - 默认操作(即死亡)。
要检查,请在命令上运行strace -f -o out
或truss -f -o out
。这将为您提供名为'out'的文件中的所有内核调用。你应该能够发现信号掩码被改变了。