免费注册 查看新帖 |

Chinaunix

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

WindowsXP如何杀死fork出的子进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-10 20:12 |只看该作者 |倒序浏览
这个不行
        kill("TERM", $kidpid);       # send SIGTERM to child

这个又说进程号找不到(是个负数)
        system("taskkill /PID $kidpid");

劳烦高手指点下,谢谢

论坛徽章:
0
2 [报告]
发表于 2010-06-11 11:32 |只看该作者
如果是WindowsXP收割子进程我知道,但不知是否是你想要的:
方法1:
  1. #!/usr/bin/perl -w
  2. foreach (1..10){

  3. unless ($pid = fork()) {
  4.     unless (fork()) {
  5.     print "Child $_ : My pid = $$\n";
  6.     &cmd($_);
  7.     }
  8. exit 0;
  9. }

  10. waitpid($pid, 0);
  11. }

  12. sub cmd{
  13.       my $da=time();
  14.       print "$_[0] $da\n";
  15. }
复制代码
方法2:
  1. #!/usr/bin/perl
  2. our $zombies = 0;
  3. $SIG{CHLD} = sub { $zombies++};

  4. my $i=0;
  5. foreach (1..10) {
  6. $i++;
  7. reaper() if $zombies;
  8. my $pid = fork();

  9. unless(defined($pid))
  10. {
  11.    print ("Fork process failured!\n");
  12.    exit();
  13. }

  14. if ($pid)
  15. {
  16.      # This is the child process.
  17.      cmd($i);
  18.      exit();
  19. }
  20. else
  21. {
  22.      # This is the parent process.
  23.      next;
  24. }

  25. }

  26. sub reaper {
  27. my $zombie;
  28. our %Kid_Status;
  29. $zombies = 0;
  30. while (($zombie = waitpid( -1, WNOHANG)) != -1) {
  31. $Kid_Status{$zombie} = $?;
  32. }
  33. }

  34. sub cmd{
  35.       my $da=time();
  36.       print "$_[0] $da\n";
  37. }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-06-11 11:42 |只看该作者
本帖最后由 flw 于 2010-06-11 11:43 编辑

还是友好一点,让它自行退出吧。
有话好好说,有什么事不能商量着来?

论坛徽章:
0
4 [报告]
发表于 2010-06-11 12:33 |只看该作者
-9可以不?

论坛徽章:
0
5 [报告]
发表于 2010-06-11 13:26 |只看该作者
本帖最后由 xti9er 于 2010-06-11 13:27 编辑

回复 1# maybenot


    如果我没猜错的话,你搞错了。
windows下fork出来的是线程吧?



如果你非要用system("taskkill /PID $kidpid"); 你可以看看tasklist /fi "pid eq $kidpid"的结果。

论坛徽章:
0
6 [报告]
发表于 2010-06-11 14:17 |只看该作者
回复 2# aef25u


多谢关注,我的确有杀死子进程的需求。。

论坛徽章:
0
7 [报告]
发表于 2010-06-11 14:24 |只看该作者
回复 3# flw

版主,谢谢。

我的问题是这样,就是有个socket,要用子进程负责stdin输入,父进程则监听socket过来的数据

问题其实我以前发过原贴在这  http://bbs.chinaunix.net/thread-1709516-1-5.html

那个perlipc里面的例子在Linux上是可用的,windows上则不行,子进程接受stdin输入后根本发不出去,所以我想了个法,client端建两个client,一个发送,一个接受,这样倒是可以成功发送和接受了,但还一条不满意,我希望在socket server端退出后,socket client端也能退出

请教。

论坛徽章:
0
8 [报告]
发表于 2010-06-11 14:25 |只看该作者
回复 4# 黑色阳光_cu


    你说的是 kill -9 吗,我希望在windows上用啊。。

论坛徽章:
0
9 [报告]
发表于 2010-06-11 14:27 |只看该作者
本帖最后由 maybenot 于 2010-06-11 14:31 编辑

回复 5# xti9er


    果然,有什么办法没?希望写出来的程序可以在windows和linux上都能用?

tasklist /FI "PID eq -2916" 不接受负的ID
ERROR: The search filter cannot be recognized.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP