当前位置: 首页 > 知识库问答 >
问题:

后台Bash脚本:如何杀死子进程

祁权
2023-03-14

我基本上是想让bash脚本永远运行节点脚本。我制作了以下bash脚本:

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

我希望当它运行时,它用给定的脚本启动节点,检查节点是否退出,如果退出,Hibernate6秒,然后重新打开节点。另外,我希望它在后台运行,并将其pid(bash pid)写入一个名为“pid”的文件中。

显然,上面解释的一切都如预期的那样工作,但我也期望当bash脚本的pid被杀死时,节点脚本将停止运行,我不知道为什么在我看来这是有意义的,但当涉及到实践时,它不起作用。bash脚本确实被杀死了,但是节点脚本一直在运行,这让我很害怕。

我已经在终端中测试过了,通过不将bash脚本发送到后台并输入ctrl c,两个脚本都会被杀死。

很明显,我没有理解背景过程的工作方式。看在上帝的份上,有人能帮帮我吗?

共有1个答案

孟财
2023-03-14

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

  • https://github.com/nodejitsu/forever -一个简单的CLI工具,用于确保给定脚本连续运行(即永远运行)
  • https://github.com/remy/nodemon -监视node.js应用程序中的任何更改,并自动重新启动服务器-非常适合开发

也许第二天它不是你想要的,但仍然值得一看。

如果您不能或不想使用这些进程,那么问题是如果您杀死父进程,那么子进程仍然存在,因此,您也应该杀死它:

pkill -TERM -P $PID

其中,$PID是父PID。

 类似资料:
  • 问题内容: 贝壳大师 我有一个bash shell脚本,其中启动了一个后台功能,例如,以显示一个无聊且冗长的命令的进度条: 现在,去世时,我看到以下文本: 这完全破坏了我本来非常棒的进度条显示的出色功能。 我如何摆脱此消息? 问题答案: 顺便说一句,我不知道您的进度栏多么酷,但是您看过Pipe Viewer(pv)吗? http://www.ivarch.com/programs/pv.shtml

  • 问题内容: 我有一个bash脚本,该脚本启动一个子进程,该子进程有时会崩溃(实际上是挂起),并且没有明显的原因(封闭源代码,因此我无能为力)。结果,我希望能够在给定的时间内启动此过程,并在给定的时间之后未成功返回的情况下将其终止。 有没有 简单 而 强大的 方法可以使用bash来实现这一目标? PS:告诉我这个问题是否更适合serverfault或超级用户。 问题答案: (如下所示: BASH常见

  • 问题内容: 使用shelljs创建一个子进程 杀死父进程后,子进程仍在运行.. 问题答案: 如果您可以使用node的内置,则可以向子进程发送信号: 这样做的好处是,主进程应该一直徘徊,直到所有子进程都终止。

  • 问题内容: 我在Python中使用子进程包运行一个子进程,以后需要杀死它。但是,子流程包的文档指出,terminate()函数仅从2.6起可用。 我们正在运行带有2.5的Linux,并且出于向后兼容的原因,我无法升级到2.6,替代品是什么?我猜这些功能是某些事情的便捷方法。 问题答案: 您在进程pid上调用os.kill。 您还可以,因为您使用的是Linux。Windows用户很不走运。

  • 问题内容: 如何杀死linux中最后一个生成的后台任务? 例: 问题答案: bash中有一个特殊的变量: $!扩展为在后台执行的最后一个进程的PID。

  • 问题内容: 例如从bash: 仅杀死父进程。 问题答案: 当您将 负 PID传递给时,它实际上会通过该(绝对)数字将信号发送到过程 组 。您可以在Python中完成与之等效的操作。