|
在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>]
我应如何改动呢,才能使在线程中的外部调用不出现死进程呢?
多谢! |
|