免费注册 查看新帖 |

Chinaunix

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

请问管道关闭的一个问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-25 13:19 |只看该作者 |倒序浏览
open(IN,"$cmd |");
close(IN);
其中$cmd是一个会不断输出信息的命令,在close(IN)的时候会出现问题,死等待,请问这个打开的管道怎样才能正常关闭?谢谢!

open(IN,"ping $IP |");
#get some message
close(IN);
这个时候close有问题,请问这个问题怎么解决啊?

[ 本帖最后由 yancncen 于 2007-1-25 13:50 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-25 15:40 |只看该作者
你是在UNIX或LINUX下执行的PING命令吗?如果是的话那你使用-c指定PING包数.否则PING太多,管道很容易被堵塞,造成进程休眠!

论坛徽章:
0
3 [报告]
发表于 2007-01-25 15:41 |只看该作者
管道的容量太小.很容易被塞满!好象只有512字节吧.

论坛徽章:
0
4 [报告]
发表于 2007-01-25 23:51 |只看该作者
和管道没有关系,是调用的命令比较慢或是阻塞,如果要立即退出,给管道kill信号就行了:

kill TERM => $PIPE;
kill KILL => $PIPE if kill 0 => $PIPE;
wait;

论坛徽章:
0
5 [报告]
发表于 2007-01-26 13:37 |只看该作者
楼上的,你上面的程序不仅仅杀掉了管道,还会连主进程也一起杀掉了,有没有别的办法呢?
谢谢!

论坛徽章:
0
6 [报告]
发表于 2007-01-26 15:54 |只看该作者
原帖由 yancncen 于 2007-1-26 13:37 发表
楼上的,你上面的程序不仅仅杀掉了管道,还会连主进程也一起杀掉了,有没有别的办法呢?
谢谢!


在eval里用超时(alarm)做吧,如果你非得在指定时间内就关闭pipe的话.

论坛徽章:
0
7 [报告]
发表于 2007-01-26 21:41 |只看该作者
原帖由 yancncen 于 2007-1-26 13:37 发表
楼上的,你上面的程序不仅仅杀掉了管道,还会连主进程也一起杀掉了,有没有别的办法呢?
谢谢!


怎么可能会把主进程杀掉呢?

论坛徽章:
0
8 [报告]
发表于 2007-01-29 10:40 |只看该作者
6楼能给我一段示例的代码吗?我是perl初学者,谢谢!

论坛徽章:
0
9 [报告]
发表于 2009-09-23 16:46 |只看该作者

回复 #1 yancncen 的帖子

my $pid = open(IN,"-|","ping $IP");
#get some message
kill 9,$pid;
close(IN);

不知道还有什么方法?

[ 本帖最后由 linuxty 于 2009-9-23 17:03 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP