免费注册 查看新帖 |

Chinaunix

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

system之后如何kill [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-11-09 15:04 |只看该作者 |倒序浏览
请问,我在perl中system一个子程序A,但是不确定A会跑多久,我用了eval{alarm}来判断A,如果超过一个小时,就die eval,然后继续执行下面的代码。但是我也需要把这个A给kill掉,但是因为同时有几十个A都在跑,请问我如何kill掉正确的A呢?或者说如何获得system产生的pid?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2016-11-09 15:38 |只看该作者
楼主的意思是存在多个A,想获得对应A的PID,并kill掉吗?

论坛徽章:
0
3 [报告]
发表于 2016-11-09 17:39 |只看该作者
你是一个PERL执行一个system A 吗,我不知道你很多个A是怎么弄的,system都是要等待的,如果是一个perl 一个A的话,可以这样
#!/usr/bin/perl -w
eval{
  local $SIG{ALRM}=sub{die "alarm\n";};
  alarm 10;
  system('sleep 50');
  alarm 0;
};
if($@ && $@ =~ /alarm/){
local $SIG{INT} = 'IGNORE';
kill INT => -$$;
print "you need\n";
}

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
4 [报告]
发表于 2016-11-09 18:38 |只看该作者
回复 3# thanatos0

我试了一下,在Windows ActivePerl环境下,可以停止继续等待system执行结束,但调用的程序仍然在后台继续工作。

能不能彻底把调用的程序也退出?

谢谢

论坛徽章:
0
5 [报告]
发表于 2016-11-10 10:35 |只看该作者
回复 4# b114213903

这个是可以杀掉PELR主进程生成的所有子进程,你的杀不掉只能是你的进程不是PERL进程的子进程,你可以自己写个SHELL去system试一下,是可以杀掉的

论坛徽章:
0
6 [报告]
发表于 2016-11-10 10:40 |只看该作者
回复 4# b114213903


论坛徽章:
0
7 [报告]
发表于 2016-11-10 11:17 |只看该作者
回复 2# 华小飞_Perl
是的

论坛徽章:
0
8 [报告]
发表于 2016-11-10 12:33 |只看该作者
回复 5# thanatos0
我按照你的方法这样写的,但是top了一下发现实际上那个loop.pl还是在跑的,并没有被kill掉。。。
  1. #!/usr/bin/perl
  2. use warnings;
  3. @array=("a".."c");
  4. $timeout=1;
  5. foreach $a (@array){
  6.     for($i=0;$i<10;$i++){
  7.         eval{
  8.             local $SIG{ALRM}=sub{
  9.                 die "timeout\n";
  10.             };  
  11.             alarm $timeout;
  12.             print "$a, $i\n";
  13.             system("perl loop.pl");
  14.             alarm 0;
  15.         };  
  16.         if($@){
  17.             print "$@\n";
  18.             local $SIG{INT}='IGNORE';
  19.             kill INT => -$;
  20.             last;
  21.         }   
  22.     }   
  23.     print("now is $a\n");
  24. }
复制代码

论坛徽章:
0
9 [报告]
发表于 2016-11-10 15:06 |只看该作者
回复 8# wx2wx

你没看你kill少了一个$吗

论坛徽章:
0
10 [报告]
发表于 2016-11-10 18:38 |只看该作者
回复 9# thanatos0

yi?很奇怪,但是我的程序本身确实是有两个$$的,我仔细检查过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP