免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1382 | 回复: 1
打印 上一主题 下一主题

[C++] 在C++Kylix3的线程中用popen调用外部程序出现死进程的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-17 17:13 |只看该作者 |倒序浏览
在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>;]

我应如何改动呢,才能使在线程中的外部调用不出现死进程呢?

多谢!

论坛徽章:
0
2 [报告]
发表于 2003-06-17 18:57 |只看该作者

在C++Kylix3的线程中用popen调用外部程序出现死进程的问题?

每执行一次就多一个popen的死进程 ???
死的原因是什么
或是因为没有wait而进程退出状态保留在系统中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP