Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多处理调用脚本的python调用(pgrp问题)?_Python_Unix - Fatal编程技术网

使用多处理调用脚本的python调用(pgrp问题)?

使用多处理调用脚本的python调用(pgrp问题)?,python,unix,Python,Unix,我正在为服务器编写一个单元测试框架,它使用popen基本上执行shell=False的“pythonmyserver.py”,运行一些测试,然后通过killpg关闭服务器 这个myserver.py可以并且将使用多进程来生成自己的子进程。问题是,从我的测试来看,服务器进程的pgrp pid似乎与运行unittests的实际主线程共享相同的组pid,因此在组pid上执行os.killpg不仅会关闭服务器,还会关闭调用popen的进程(我不想这样做)。为什么会这样?我怎样才能让他们在我可以独立杀死的

我正在为服务器编写一个单元测试框架,它使用popen基本上执行shell=False的“pythonmyserver.py”,运行一些测试,然后通过killpg关闭服务器


这个myserver.py可以并且将使用多进程来生成自己的子进程。问题是,从我的测试来看,服务器进程的pgrp pid似乎与运行unittests的实际主线程共享相同的组pid,因此在组pid上执行os.killpg不仅会关闭服务器,还会关闭调用popen的进程(我不想这样做)。为什么会这样?我怎样才能让他们在我可以独立杀死的单独的组PID上?

你在问一些非常混乱的问题。我怀疑这些都不是你想做的,你真的想用更简单的方法来完成。然而,假设您真的想搞乱流程组

通常,仅通过setpgrp(2)系统调用创建新的进程组。否则,fork(2)创建的流程始终是当前流程组的成员。这就是说,在创建一个新的流程组时,该组中的流程甚至不受任何tty的控制,要正确地完成您似乎想做的事情,需要理解整个流程组模型。史蒂文斯的《Unix环境中的高级编程》是一本很好的参考书,其中详细介绍了这一切


如果您真的想沿着这条路线走下去,您必须自己实现popen或等效工具,并进行所有适当的系统调用。

您正在询问一些非常混乱的问题。我怀疑这些都不是你想做的,你真的想用更简单的方法来完成。然而,假设您真的想搞乱流程组

通常,仅通过setpgrp(2)系统调用创建新的进程组。否则,fork(2)创建的流程始终是当前流程组的成员。这就是说,在创建一个新的流程组时,该组中的流程甚至不受任何tty的控制,要正确地完成您似乎想做的事情,需要理解整个流程组模型。史蒂文斯的《Unix环境中的高级编程》是一本很好的参考书,其中详细介绍了这一切


如果你真的想沿着这条路线走下去,你必须自己实现popen或同等功能,并进行所有适当的系统调用。

你不需要重新实现popen。将
subprocess.Popen
preexec\u fn=os.setpgrp
一起使用。无需重新实现Popen。将
subprocess.Popen
preexec\u fn=os.setpgrp
一起使用。