我希望我的程序监视它已启动的某些进程。这些是我所知道的最重要的要求:
记录子进程的退出状态(除非它们在我的程序退出后退出)。
记录stderr和stdout输出。理想情况下,在写入的几秒钟内,这不是一个硬性要求:仅在用户请求时才可以阅读它。
有时,子进程会比我的程序更长。其他时候,他们不会。重要的是,我的程序不会使子进程更有可能以可能给我的用户带来不便的方式退出 - 例如,发送到我的程序的Unix信号不应该杀死子进程作为副作用。如果父母退出,孩子应该继续不受影响地运行。
理想情况下,父母会跟踪孩子的叉子,以便他们可以被监控并可能发出信号。但这并不是一项艰难的要求。
该方案需要在Linux和OS X上运行。
我的解决方案是执行守护进程所需的所有标准操作,但第二个分叉除外。在此之前,我将输出重定向到临时日志文件,然后使用inotify(在Linux上)或kqueues(在OS X上)监视日志文件。
据我所知,省略第二个分支的唯一损失是稳定性要求(3.),如果子进程获得控制tty。
这个解决方案是否适合这些要求?对于我没有考虑过的子流程会发生什么不好的事情?