我正在编写一个简单的作业计划程序,我需要保持一些基本的通信级别,从计划程序(父级)到生成的进程(子级)。 基本上,我希望能够从调度程序-> child发送信号,并还通知调度程序孩子的退出状态。
通常,使用带有信令/ waitpid的常规子进程Popen可以使一切正常。我的问题是我希望能够在不影响正在运行的作业的情况下重新启动调度程序,并在调度程序重新启动后重新建立通信。
我经历了一些想法,没有什么感觉是“正确的”。
现在,我有一个简单的包装器脚本,该脚本使用命名管道维护与调度程序的通信,包装器实际上将运行调度的命令。在大多数情况下,这似乎很好用,但是我已经看到它受到了一些竞争,这主要是由于命名管道如何保持活动状态才能进行读/写操作(无缓冲)。
我正在考虑尝试使用Linux消息队列,但不确定是否正确的路径。另一种选择是在调度程序上设置服务器套接字接受,并让子进程在启动时连接到调度程序,并在断开连接时重新建立连接。这可能是多余的,但可能是最可靠的。 可惜我必须经历所有这些麻烦,因为我无法在重新启动时“重新附加”子进程(我意识到这是有原因的。)。
还有其他想法吗?这似乎是任何调度程序都会遇到的常见问题,我在这里错过了一些明显的解决方案吗?