我正在为使用popen基本上执行" python myserver.py"的服务器编写单元测试框架。使用shell = False,运行一些测试,然后继续使用killpg服务器。
这个myserver.py可以并将使用多处理来生成自己的子进程。问题是,从我的测试来看,似乎服务器进程的pgrp pid与运行单元测试的实际主线程共享相同的组pid,因此在组pid上执行os.killpg不仅会关闭服务器而且调用popen的过程(不是我想做的)。为什么这样做?我怎样才能将它们放在我可以独立杀死的单独的群组中?
答案 0 :(得分:1)
你在这里问一些非常混乱的事情。我怀疑这根本不是你想要做的,而且你真的想要以更简单的方式完成这个。但是,假设你真的想搞乱进程组......
通常,只有setpgrp(2)系统调用才会创建新的进程组。否则,fork(2)创建的进程始终是当前进程组的成员。也就是说,在创建一个新的流程组时,该组中的流程甚至不受任何tty控制,并且执行您想要正确执行的操作需要了解整个流程组模型。所有这些工作原理的一个很好的参考是史蒂文斯,“Unix环境中的高级编程”,其中详细介绍了它。
如果您真的想沿着这条路走下去,那么您将不得不通过所有适当的系统调用来实现popen或等价物。