簡體   English   中英

獲取子進程中分叉進程的stdout / stderr

[英]Get the stdout/stderr of a forked process in a subprocess

我有一個調用fork()的C程序

我有一個python腳本,用於執行C程序

child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE,stdout=subprocess.PIPE, bufsize=0)

現在我可以從輸出錯誤與讀取child.stderr.read(1)child.communicate() ,...但我的問題是,現在,我怎樣才能僅從 過程的輸出。 這甚至可能嗎? 我可以從原來的C程序和分支中獲取pid嗎?

親切的問候,非常感謝你:)

法比安

你要求的是復雜的,並且在純python中是不可能的 - 你需要一些特定於操作系統的機制。

你真的要求兩件事:

  • 從父進程的PID中識別分叉進程
  • 攔截任意進程的標准輸入/輸出

你可以通過解析/ proc來做前者,如果你在Linux上,后者實際上是一個類似調試器的功能(例如, 一個進程如何攔截Linux上另一個進程的stdout和stderr?

更有可能的是,您將需要更改C程序的工作方式 - 例如,從python腳本而不是中間C代碼執行fork()/ daemonization將允許您直接獲取子進程。

我認為當你在C中fork()一個進程時,你不能將任何描述符從子進程傳遞回父進程 - 但可能是我錯了。 只有你得到的是新子進程的PID。 最好的方法應該是打開一個管道(常規名稱,例如管道名稱包含進程的PID),然后你可以從任何地方打開它。

最后,當你fork()進程時,它會給你PID,你可以將PID(C二進制和分叉)寫入C程序的stdout,例如帶分隔符:

cpid = fork();
printf("%d|%d", (int)get_pid(), cpid);

祝好運 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM