Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 fork exec问题,子进程输出与父进程位于同一位置_Python_Exec_Fork - Fatal编程技术网

Python fork exec问题,子进程输出与父进程位于同一位置

Python fork exec问题,子进程输出与父进程位于同一位置,python,exec,fork,Python,Exec,Fork,使用:python fork.py和:python fork.py 1尝试下面的代码,查看它的功能 #!/usr/bin/env python2 import os import sys child_exit_status = 0 if len(sys.argv) > 1: child_exit_status = int(sys.argv[1]) pid = os.fork() if pid == 0: print "This is the child" if

使用:
python fork.py
和:
python fork.py 1
尝试下面的代码,查看它的功能

#!/usr/bin/env python2

import os
import sys

child_exit_status = 0
if len(sys.argv) > 1:
    child_exit_status = int(sys.argv[1])

pid = os.fork()
if pid == 0:
    print "This is the child"
    if child_exit_status == 0:
        os.execl('/usr/bin/whoami')
    else:
        os._exit(child_exit_status)
else:
    print "This is the parent"
    (child_pid, child_status) = os.wait()
    print "Our child %s exited with status %s" % (child_pid, child_status)
问:为什么子进程可以进行“打印”,但它仍然被输出到与父进程相同的位置


(我在Ubuntu 10.04上使用Python 2.6)

因为您没有更改子进程的文件描述符1标准输出的目标。

因为您没有更改子进程的文件描述符1标准输出的目标。

在linux下,子进程继承(几乎)父进程的所有内容,包括文件描述符。在您的情况下,文件描述符1(stdout)和文件描述符2(stderr)与父级打开到同一个文件

有关详细信息,请参阅手册页


如果希望子进程的输出转到其他地方,可以在子进程中打开一个新文件。

在linux下,子进程(几乎)继承父进程的所有内容,包括文件描述符。在您的情况下,文件描述符1(stdout)和文件描述符2(stderr)与父级打开到同一个文件

有关详细信息,请参阅手册页


如果您希望子项的输出转到其他地方,可以在子项中打开一个新文件。

因为这是规则?认真地原因是Linux就是这样工作的。你真正的问题是什么?如何改变这一点?因为这是规则?认真地原因是Linux就是这样工作的。你真正的问题是什么?如何改变这一点?谢谢,这非常有帮助!谢谢,这很有帮助!