|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
在C++Kylix3的線程中用popen調用外部程序出現死進程的問題?
在C++Kylix3的線程中用popen調用外部程序出現死進程的問題?
我有如下一段代碼:
FILE *fp;
char buf[200];
fp=popen("/home/myuser/test","r");//test是一個可執行程序(printf了50次後就自動結束)
while(fgets(buf,200,fp)!=NULL)
{
tem=AnsiString(buf) ;//用管道將終端信息顯示到MEMO中
Form1->;Memo1->;Lines->;Add(tem.SubString(1,tem.Length()-1) );
}
pclose(fp);
在主程序中執行,無論執行多少次,用ps命令查看都沒有死進程,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
但是將其改在線程中執行(代碼如下),每執行一次就多一個popen的死進程
void __fastcall MyPopen::Execute()
{
FILE *fp;
char buf[200];
setsid();
fp=popen("/home/myuser/test","r");//test是一個可執行程序(printf了50次後就自動結束)
while(fgets(buf,200,fp)!=NULL)
{
tem=AnsiString(buf) ;//用管道將終端信息顯示到MEMO中
Form1->;Memo1->;Lines->;Add(tem.SubString(1,tem.Length()-1) );
}
pclose(fp);
Terminate();
}
用ps -aux顯示如下
myuser 23634 0.0 0.0 0 0 ? Z 14:38 0:00 [popen <defunct>;]
myuser 23636 0.0 0.0 0 0 ? Z 14:38 0:00 [popen <defunct>;]
myuser 23637 0.0 0.0 0 0 ? Z 14:39 0:00 [popen <defunct>;]
我應如何改動呢,才能使在線程中的外部調用不出現死進程呢?
多謝! |
在C++Kylix3的線程中用popen調用外部程序出現死進程的問題?
每執行一次就多一個popen的死進程 ???
死的原因是什麼
或是因為沒有wait而進程退出狀態保留在系統中 |
| |