简介:有很多子进程的巨大的应用程序,我需要这样的东西:
/* parent process, far from fork*/
suppress_child_output_to_parent_tty();
printf("important message");
/* huge piece of code */
printf("important message");
restore_child_output_to_parent_tty();
我知道这是一种标准的方法
但是我不应该为此使用长时间线程,我的应用程序作为多个实例与许多多线程子程序一起工作,并且存在一些OS sheduler问题,真的,我应该节约cpu线程。因此,我寻找一些优雅的操作系统设施块子STDOUT。
我能做什么?
发布于 2016-03-14 02:50:50
这是不可能的:如果您的fork()
,子文件描述符指向与父文件描述相同的文件描述。从操作系统的角度来看,父文件描述符和子文件描述符访问文件描述符没有区别。有一些方法可以解决这个问题(例如,将调试器附加到子程序上),但它们确实很复杂。
最简单的方法可能是挂起孩子并恢复它:
kill(child, SIGSTOP);
printf("important message");
/* huge piece of code */
printf("important message");
kill(child, SIGCONT);
通过设计,孩子不可能忽略SIGSTOP
。当第一个kill()
调用成功时,您可以安全地假设子调用已经停止。它由SIGCONT
调用继续进行。请注意,通过设计,在您想要继续您的孩子之前,另一个进程是可能的,但是您没有什么可以做的。
请注意,如果您停止您的子程序,您可能会收到一个SIGCHLD
,这取决于您如何配置信号处理程序。确保您正确地配置了所有内容,并阅读了相应的文档。
https://stackoverflow.com/questions/35985261
复制