免费注册 查看新帖 |

Chinaunix

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

popen()后创建的进程与执行它的进程的关系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-06 23:24 |只看该作者 |倒序浏览
http://chinaunix.net/jh/23/62446.html看了这个贴子,好像对popen说的较少。我有几个疑问,通过具体例子解说如下:
int main(void)
{
    ……
    fp=popen("pppd call new","r";
    ……
    pclose(fp);
    ……
}
将其编译运行后,观察进程表如下:
15       a.out
16       sh -c pppd call new
17       pppd call new   这是一个拨号建立ppp连接的进程,modem处于连接状态时,该进程一直在运行

运行./a.out时,pclose(fp);一句后的语句一直得不到执行,程序悬在那里等待。此时:
我如果kill 16,则程序会继续执行至结束,进程表中只剩17。
我如果kill 17,则程序会继续执行至结束,这三个进程都将结束。

由此我认为16,17应该是父子关系。可15,16是什么关系呢?应该不是父子关系吧?

论坛徽章:
0
2 [报告]
发表于 2004-02-06 23:54 |只看该作者

popen()后创建的进程与执行它的进程的关系

pclose(fp)应该不会阻塞,
但gets()之类读的函数才会阻塞。
楼主你确定是阻塞在pclose(fp);

论坛徽章:
0
3 [报告]
发表于 2004-02-07 00:12 |只看该作者

popen()后创建的进程与执行它的进程的关系

a.out运行至popen时,产生儿子运行sh -c pppd call new并等待其结束,sh再产生儿子运行pppd call new并等待其结束。
你的现象跟你的程序完全吻合!如果有什么不对的地方,是你理解错了,必须改你的程序。

论坛徽章:
0
4 [报告]
发表于 2004-02-07 10:24 |只看该作者

popen()后创建的进程与执行它的进程的关系

原帖由 "jianyan" 发表:
pclose(fp)应该不会阻塞,
但gets()之类读的函数才会阻塞。
楼主你确定是阻塞在pclose(fp);
确定,我在此语句前后各加了一条输出语句.可以验证.

论坛徽章:
0
5 [报告]
发表于 2004-02-07 10:37 |只看该作者

popen()后创建的进程与执行它的进程的关系

原帖由 "FH" 发表:
a.out运行至popen时,产生儿子运行sh -c pppd call new并等待其结束,sh再产生儿子运行pppd call new并等待其结束。
你的现象跟你的程序完全吻合!如果有什么不对的地方,是你理解错了,必须改你的程序。

也就是说是祖孙3代的关系了?我认为之所以悬在pclose(),是因为16的儿子17 pppd call new没有结束,因而16也不能结束,反应到程序中就是pclose()语句没有执行过去..可我用kill(17,SIGTERM)在linux下可以杀死17,但到了uclinux下,就编译不通过了,运因是不认SIGTERM.然后我用execl("/bin/sh ","kill","17",NULL);也不成功.不知道该如何杀死17啊?

论坛徽章:
0
6 [报告]
发表于 2004-02-07 10:47 |只看该作者

popen()后创建的进程与执行它的进程的关系

对!就是祖孙三代!
编译通不过?你include <signal.h>;了吗?

论坛徽章:
0
7 [报告]
发表于 2004-02-07 11:48 |只看该作者

popen()后创建的进程与执行它的进程的关系

我的头文件:
#include <stdio.h>;
#include <stdlib.h>;
#include <unistd.h>;
#include <sys/types.h>;
#include <sys/wait.h>;
  没有signal.h  .在linux8.0下可以gcc .没有问题啊.而且我还将
kill(getpid()+2,SIGTERM);改成了kill(getpid()+2,15);
在linux下一样没有问题,在uclinux下也不能执行,不过能编译不出错.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP