0

我希望我的程序监视它已经启动的一些进程。这些是我所知道的最重要的要求:

  1. 记录子进程的退出状态(除非它们在我的程序退出后退出)。

  2. 记录 stderr 和 stdout 输出。理想情况下,在它被写入后的几秒钟内,但这并不是一个硬性要求:只有在用户请求时阅读它可能就足够了。

  3. 有时,子进程的寿命会比我的程序长。其他时候,他们不会。重要的是,我的程序不会使子进程更有可能以可能给我的用户带来不便的方式退出——例如,发送到我的程序的 Unix 信号不应作为副作用杀死子进程。如果父级退出,子级应该继续运行而不受影响。

  4. 理想情况下,父母会跟踪孩子的分叉,这样他们就可以被监控并可能发出信号。不过,这不是硬性要求。

  5. 该方案需要同时在 Linux 和 OS X 上运行。

我的解决方案是执行守护进程所需的所有标准操作,除了第二个分叉。在此之前,我将输出重定向到一个临时日志文件,然后使用 inotify(在 Linux 上)或 kqueues(在 OS X 上)监视日志文件。

据我所知,省略第二个分叉对我的稳定性要求(3.)的唯一损失是子进程是否获得了控制 tty。

这个解决方案是否适合这些要求?我没有考虑过的子进程会发生什么坏事?

4

0 回答 0