2012-12-29 71 views
1

如果我試圖在管道運行時關閉管道,它會等待,直到命令完成。一些命令永遠運行,導致它無限凍結。我設法解決的唯一解決方案是確定PID,終止進程並關閉管道。但我還沒有找到安全確定PID的方法。確定在Windows上調用popen的PID

FILE* pipe; 
wchar_t* command; 

pipe = _wpopen(command, L"r"); 
... // determine the PID and TerminateProcess 
pclose(pipe); 

那麼如何確定從popen調用到popen的PID?

回答

0

我不認爲有直接的方法可以得到pid。使用CreateToolhelp32SnapshotEnumProcesses獲取pids的列表並選擇您的。

這裏是一些sample code來枚舉進程。 Some more

+0

這是我現在使用的解決方案(通過比較流程命令),但它感覺很便宜。必須有其他方式。也許通過使用不同的函數而不是popen。 – Michael

+1

@Michael你可以編寫你自己的popen-crt源代碼與Visual Studio一起發佈 - 你可以調整一下,創建一個修改後的mypopen,它返回來自CreateProcess的PID/Handle。除此之外,我想不出另一種方式。 – user93353

+0

我一定會考慮一下。謝謝! – Michael