免费注册 查看新帖 |

Chinaunix

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

多进程的应用程序,用system调用遇到的麻烦问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-22 21:26 |只看该作者 |倒序浏览
本帖最后由 hn_weicr 于 2011-05-23 12:04 编辑

1、第三方的程序以以下的方式启动
scout -r A -n 30 -l  scout_start.log
启动后生成30个进程。
在perl中用
system("scout -r A -n 30 -l  scout_start.log ")怎么都不能成功,
只能启动2个或3个进程。
这个问题现在还没有办法解决。请各位帮忙。

注:我不能直接用exec 的方法,主程序在执行这个命令后还有很多逻辑工作要做。

2、用
system "kill -9 `ps -ef | grep scout |grep -v grep  awk '{print \$2}'`";
也是怎么也杀不掉以上程序生成的全部30个进程,只能杀掉一部分
但用
@array=`ps -ef | grep scout |grep -v grep  awk '{print \$2}'`;
foreach $i (@array)
{ $cmd="kill -9 $i";
   system($cmd);
}
却可以成功kill掉所有的30个进程。
为什么???

论坛徽章:
0
2 [报告]
发表于 2011-05-23 00:09 |只看该作者
回复 1# hn_weicr
第一个问题急着要解决,请大家帮忙呀。。。。。。。

论坛徽章:
0
3 [报告]
发表于 2011-05-23 09:04 |只看该作者
SYSTEM会等待子进程返回 ,你使用qx{} 试试

论坛徽章:
0
4 [报告]
发表于 2011-05-23 11:00 |只看该作者
第三方的程序应该是父进程fork 30个子进程的。
system 这样调应该没有问题呀。
会不会是perl的机制不支持呢。。。。
郁闷中。

qx() 与``也不行呀。放到后台一样不行 &

论坛徽章:
0
5 [报告]
发表于 2011-05-23 11:28 |只看该作者
那你直接用FORK+EXEC吧。

论坛徽章:
0
6 [报告]
发表于 2011-05-23 11:55 |只看该作者
system 本身就是fork exec waitid呀

论坛徽章:
0
7 [报告]
发表于 2011-05-23 12:42 |只看该作者
对于PERL来说,system不是等于 fork+exec+pid,虽然FORK和SYSTEM都调用PerlProc_fork这个函数,不过system会多做一步处理,就是定义一个管道。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP