背景上的Bash脚本:如何杀死子进程

时间:2013-05-24 13:34:38

标签: linux node.js bash

好吧,我基本上试图让bash脚本永远运行节点脚本。我制作了以下bash脚本:

#!/bin/bash
while true ; do
        cd /myscope/
        unlink nohup.out
        node myscript.js
        sleep 6
done & echo $! > pid

我期待它运行时,它会使用给定的脚本启动节点,检查节点是否退出,如果是,则休眠6秒并重新打开节点。另外,我希望它在后台运行并将它的pid(bash pid)写在名为“pid”的文件上。

上面解释的所有内容都按预期工作,显然,但是我也期望当bash脚本的pid被杀死时,节点脚本会停止运行,我不知道为什么这在我看来是有意义的,但是当谈到练习时,它不起作用。 bash脚本确实被杀了,但是节点脚本一直在运行,这让我感到非常震惊。

我在终端测试了它,没有将bash脚本发送到后台并输入ctrl + c,两个脚本都被杀死了。

我很想念背景过程的工作方式。为了上帝的缘故,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

有很多工具可以让你做你正在尝试的事情,只有两个在我的头顶:

也许第二个不是你想要的,但还是值得一看。

如果你不能或不想使用那些,那么问题是,如果你杀死父进程,那么孩子仍然在那里,所以,你也应该杀掉它:

pkill -TERM -P $PID

其中$PID是父PID。