我有一个产生一些孩子的Perl脚本。它们都需要很长时间才能运行,并在此过程中创建目录和文件。我经常注意到在孩子死于自然原因之前我想要改变的事情,所以我必须关闭所有东西(这涉及一些grep
和kill
电话)并删除孩子的任何文件创建。这不是什么大不了的事,但颈部有点疼。我想创建一个设置,让孩子们都受到监控,所以当我再次启动父母时,会报告仍在运行的孩子。
到目前为止,我最好的想法是保存一个日志文件,其中包含我使用PID运行的子项,检查它并在父脚本的开头更新它。杀死并报告仍在运行的所有孩子,并在新运行之前让用户手动清理目录和文件。
所以我的问题是这样的:我怎样才能将子项添加到日志文件中?有没有办法设置一个可以自动处理它的触发器,或者我不得不记得在新进程启动的代码中的任何地方执行它?
P.S。我当然愿意接受有关更好方法的建议!
答案 0 :(得分:0)
signal handlers怎么样?父级可以跟踪它已启动的作业的pid(如果需要,还可以跟踪已使用SIGCHLD
处理程序获得的pid)。当你想要提前终止一切时,请告知父母杀死所有孩子并在他们之后进行清理。如果子进程也是Perl脚本,您可以将信号处理程序放在子进程中,看看它们是否会自行清理。