藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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而進程退出狀態保留在系統中



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com