0

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

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

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

ps 我当然愿意接受更好的方法来实现这一点的建议!

4

1 回答 1

0

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

于 2011-03-10T17:42:04.303 回答