启动另一个应用程序的脚本将在退出时将其关闭

时间:2012-08-23 13:55:43

标签: bash nohup

我有一个脚本可以使用nohup my_app &启动另一个应用程序,但是当初始脚本消失时,启动的进程也会停止运行。根据我的理解,因为它已经与nohup一起运行,不应该发生。原始脚本也用nohup调用。

那里出了什么问题?

3 个答案:

答案 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 outtruss -f -o out。这将为您提供名为'out'的文件中的所有内核调用。你应该能够发现信号掩码被改变了。