我有一个调用fork()
我有一个用
执行C程序的python脚本child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE, bufsize=0)
现在我可以使用child.stderr.read(1)
或child.communicate()
来阅读 stdout 和 stderr ,...但我现在的问题是,我该怎么办? 仅 分叉进程的输出。这甚至可能吗?我可以从原始C程序和 fork 中获取pid吗?
费边
答案 0 :(得分:1)
你要求的是复杂的,并且在纯python中是不可能的 - 你需要一些特定于操作系统的机制。
你真的要求两件事:
如果你在Linux上,你可以通过解析/ proc来完成前者,后者实际上是一个类似调试器的功能(例如How can a process intercept stdout and stderr of another process on Linux?)
更有可能的是,您需要更改C程序的工作方式 - 例如,从python脚本而不是中间C代码执行fork()/ daemonization将允许您直接获取子进程。
答案 1 :(得分:0)
我认为当你在C中fork()一个进程时,你不能将子进程中的任何描述符传递给父进程 - 但可能是我错了。只有你得到的是新子进程的PID。最好的方法是打开一个管道(按常规名称,例如管道名称包含进程的PID),然后你可以从任何地方打开它。
最后,当你fork()进程时,它会给你PID,你可以将PID(C二进制和分叉)写入C程序的stdout,例如带分隔符:
cpid = fork();
printf("%d|%d", (int)get_pid(), cpid);
祝你好运:)