【问题标题】:Fork child process to die when parent exits? (bash)当父级退出时,fork 子进程会死掉? (重击)
【发布时间】:2016-11-23 17:15:35
【问题描述】:

我正在处理并行处理,而不是处理 cvar 和锁,我发现在 shell 脚本中按顺序运行一些命令以避免在一个地方出现竞争条件要容易得多。新问题是其中一个命令调用了另一个程序,操作系统已决定将其放入新进程中。我需要从父程序中杀死这个进程,但是父程序只知道父程序的pid(shell脚本),所以这个进程一直在自己执行。

bash 有没有办法在父进程死亡时设置子进程死亡?我试图弄清楚如何将它作为守护进程执行,因为我在父进程死亡时读取了守护进程退出,但这很棘手,我不能完全正确。谢谢!

【问题讨论】:

  • 你的意思是说当启动的父脚本退出时杀死所有后台进程?
  • 是的!我怎样才能做到这一点?谢谢。
  • 我猜你在父进程退出时需要trap 命令,但我不确定如何使用它。
  • 是的,我找到了这个stackoverflow.com/questions/360201/…,但我也有点不确定如何使用它
  • 正是我的意思!我认为您可以尝试在父脚本上使用该命令并告诉我们。

标签: linux bash shell process kill


【解决方案1】:

找到了问题,并修复了它(除了一些无法重定向到 /dev/null 的讨厌消息)。

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT

【讨论】:

  • 添加更多关于您遇到的问题的上下文,并解释此命令如何解决它!
  • 看起来这个答案的来源(应该被引用)是这样的:stackoverflow.com/a/2173421/1941654(也指stackoverflow.com/a/28333938/1941654)。 trap - SIGTERM 防止由于 SIGTERM 上的无限递归而导致的段错误。 kill -- -$$ 杀死进程组中的所有进程。
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 2015-03-17
  • 2010-09-28
  • 2010-09-21
  • 1970-01-01
  • 2014-09-16
  • 2018-05-19
相关资源
最近更新 更多