Unix 如何在不影响子进程的情况下监视子进程的输出和退出状态?
我想让我的程序监视它已经启动的一些进程。这些是我所知道的最重要的要求:Unix 如何在不影响子进程的情况下监视子进程的输出和退出状态?,unix,process,signals,stdout,exit,Unix,Process,Signals,Stdout,Exit,我想让我的程序监视它已经启动的一些进程。这些是我所知道的最重要的要求: 记录子进程的退出状态(除非它们在我的程序退出后退出) 记录stderr和stdout输出。理想情况下,在它被写入后的几秒钟内,但这不是一个硬性要求:它可能足以在用户请求时读取它 有时,子进程将比我的程序更有效。其他时候,他们不会。重要的是,我的程序不应使子进程以可能给用户带来不便的方式退出--例如,发送到我的程序的Unix信号不应作为副作用杀死子进程。如果父级退出,子级应继续运行而不受影响 理想情况下,家长会跟踪孩子的分叉,
对于这些需求,这个解决方案是好的吗?我没有考虑到的子进程可能会发生哪些不好的事情?您计划运行哪些进程?这些过程需要终端输入吗?过程是否需要获取信号?如果流程需要交互,那么在监控标准输出和标准错误方面还有大量工作要做;您可能需要一个伪tty。您需要在单独的进程组中运行这些进程,这样您的程序就可以在不太影响子进程的情况下退出—但是伪tty监视将阻碍这一点。父母不能轻易地追踪孙子孙女。Linux有
/proc
,但Mac OS X没有。非交互式进程。程序的信号行为大多未知。进程组不确定子进程是否受父进程退出的影响(但会话会)。