【问题标题】:Keeping track children from old runs of a script从旧的脚本运行中跟踪孩子
【发布时间】:2011-07-09 03:29:25
【问题描述】:

我有一个 Perl 脚本,它产生了一些孩子。它们都需要相当长的时间来运行,一路上创建目录和文件。我经常注意到我想在孩子们死于自然原因之前改变的事情,所以我必须关闭所有东西(这涉及到几个grepkill 电话)并删除孩子们创建的所有文件。真的不是什么大事,就是脖子有点疼。我想创建一个所有子节点都受到监控的设置,因此当我再次启动父节点时,会报告仍在运行的老子节点。

到目前为止,我最好的想法是保留一个我使用他们的 PID 运行的孩子的日志文件,检查它并在父脚本的开头更新它。杀死并报告任何仍在运行的子进程,并在重新运行之前让用户手动清理目录和文件。

所以我的问题是:如何将子项添加到日志文件中?有没有办法设置一个可以自动处理它的触发器,还是我不得不记住在代码中新进程开始的任何地方执行它?

附言我当然愿意接受有关更好方法的建议!

【问题讨论】:

标签: perl child-process


【解决方案1】:

signal handlers 怎么样?父进程可以跟踪它已启动的作业的 pid(如果需要,还可以跟踪使用 SIGCHLD 处理程序获得的 pid)。当您想提前终止一切时,请向父母发出信号以杀死所有孩子并在他们之后进行清理。如果子进程也是 Perl 脚本,您可以将信号处理程序放在子进程中,看看它们是否会自行清理。

【讨论】:

  • 我担心的是父进程需要保持运行以监视其子进程。用户可以启动父脚本的另一个实例,然后开始运行子脚本的新副本,而没有意识到已经有一堆正在运行。
猜你喜欢
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2016-07-12
  • 1970-01-01
  • 2016-10-11
  • 2015-12-30
  • 1970-01-01
相关资源
最近更新 更多