如何实施监督另一个流程的流程?

时间:2016-11-01 14:43:26

标签: linux bash unix

目前在我的工作场所,我有一个名为"批处理启动器的脚本" (用bash编写),用于监督批处理的执行,记录其输出并处理批处理的返回代码。目前通过{"批量启动器"中的env电话完成此操作:

env $BATCH_ENV $BATCH_NAME $BATCH_OPTIONS >> $OUT_FILE 2>&1

几天前,用perl编写的一个批次对PGID进行了一次杀戮调用(以消除所有分叉的孩子),并且因为"批量发射器"与它产生的任何东西共享PGID,它也被这个电话杀死了。

我应该如何正确确保任何PGID终止呼叫将离开"批量启动器"完好无损,并报告说它正在监督的过程被杀了?

到目前为止,我已经听说过setsid -w命令来解决此问题,但我无法将其与env调用结合使用。

1 个答案:

答案 0 :(得分:0)

我犯了一个愚蠢的错误,就是咨询在线文档,而不是在我目前工作的系统中调用mansetsid表示setsid支持标记,日期为2014年7月。我的手册页的日期是1993年11月(我在RHEL 5上工作),并且没有任何标记支持。

-w试图将env $BATCH_ENV setsid $BATCH_NAME $BATCH_OPTIONS >> $OUT_FILE 2>&1 标志解析为文件名,导致 execvp:没有此类文件或目录错误。一旦我删除了旗帜,一切正常。 end命令现在看起来像:

$BATCH_NAME

现在从"批量启动器"分配SID和PGID等于$BATCH_NAME的PID,并且SIGTERM的PGID上的kill调用离开"批处理启动器"未受影响,现在很高兴地报告返回状态143({{1}})。