您可以将父项及其子项放在自己的进程组中,并通过向父项发送信号来终止整个系列 .

根据您的问题的性质,您可能愿意离开(麦克马纳斯先生!),并且因为每次尝试 kill 对已经死亡的子进程感到失败 .

如果父进程除了跟踪孩子之外什么都不做,那么您只需要一个简单的循环 .

while ((my $kid = waitpid -1, 0) > 0) {

warn "$0: [$$] reaped $kid\n";

delete $kid{$kid};

}

如果在父进程中有其他处理,则将第二个参数中的 WNOHANG 位设置为 waitpid 会告诉系统调用不要阻塞 . 这允许您定期收获僵尸儿童,然后返回其他处理 .

出于演示目的,假设我们开始了一群困倦的孩子 .

#! /usr/bin/env perl

use strict;

use warnings;

use 5.10.0; # for defined-or

my %kid;

for (1 .. 5) {

my $pid = fork // die "$0: fork: $!"; # / fix SO hilighting

if ($pid == 0) {

warn "$0: [$$] sleeping...\n";

sleep 10_000;

exit 0;

}

else {

$kid{$pid} = 1;

warn "$0: [$$] forked $pid\n";

}

}

然后为了模拟来自外部的杀戮,我们分叉另一个孩子随机挑选其余的兄弟姐妹 .

my $pid = fork // die "$0: fork: $!";

if ($pid == 0) {

warn "$0: [$$] The killer awoke before dawn.\n";

while (keys %kid) {

my $pid = (keys %kid)[rand keys %kid];

warn "$0: [$$] killing $pid...\n";

kill TERM => $pid or warn "$0: [$$] kill $pid: $!";

delete $kid{$pid};

sleep 1;

}

exit 0;

}

现在,上面的循环读取了ob告 .

while ((my $kid = waitpid -1, 0) > 0) {

warn "$0: [$$] reaped $kid\n";

delete $kid{$kid};

}

仔细检查没有人活着 .

if (keys %kid) {

my $es = keys %kid == 1 ? "" : "es";

die "$0: unkilled process$es:\n",

map " - $_\n", keys %kid;

}

输出:

./waitpid-demo: [1948] forked 7976

./waitpid-demo: [7976] sleeping...

./waitpid-demo: [1948] forked 7244

./waitpid-demo: [7244] sleeping...

./waitpid-demo: [1948] forked 4776

./waitpid-demo: [4776] sleeping...

./waitpid-demo: [1948] forked 4304

./waitpid-demo: [4304] sleeping...

./waitpid-demo: [1948] forked 7908

./waitpid-demo: [7908] sleeping...

./waitpid-demo: [5144] The killer awoke before dawn.

./waitpid-demo: [5144] killing 7908...

./waitpid-demo: [1948] reaped 7908

./waitpid-demo: [5144] killing 7976...

./waitpid-demo: [1948] reaped 7976

./waitpid-demo: [5144] killing 4776...

./waitpid-demo: [1948] reaped 4776

./waitpid-demo: [5144] killing 4304...

./waitpid-demo: [1948] reaped 4304

./waitpid-demo: [5144] killing 7244...

./waitpid-demo: [1948] reaped 7244

./waitpid-demo: [1948] reaped 5144

java父进程获取子进程异常_如何在perl的父进程中获取死亡的子进程的PID?相关推荐

  1. python获取图片大小_如何在pygame(python)中获取图片大小

    If I'm using an image and I want to know the image's size in the file. There is a function to get th ...

  2. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?

    例外是程序执行期间发生的问题(运行时错误).发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行. 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如 ...

  3. Java如何配置ibmmq集群_如何在IBM MQ集群中动态创建订阅?

    当我使用此代码作为订阅者时: class Product(model.Models): def saveProduct(self, product): if self.validateProduct( ...

  4. html通过php获取mysql数据_怎样借助PHP从HTML网页中获取phpmyadmin数据库里数据表的内容...

    这是我以前写的,先把文档改成 .php格式,代码写在html最后,$sql = "SELECT num,foodname, foodprice, foodcontent,foodImg FR ...

  5. java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...

    @ 1.异常 1.1 异常概念 异常 :简单说就是不正常运行,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java处 ...

  6. python中什么是异常_一文教你读懂 Python 中的异常信息

    在写 Python 代码的时候,当代码中出现错误,会在输出的时候打印 Traceback  错误信息,很多初学者看到那一堆错误信息,往往都会处于懵逼状态,脑中总会冒出一句,这都是些啥玩意.如果你是第一 ...

  7. map中获取数组_如何从php多维数组中获取特定的键值?

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 在这篇文章中,我们将给大家介绍如何在php中从多维数组中获取特定的键值数组.这里我们将使用a ...

  8. uniapp同步获取用户信息_表单设计是为了帮助用户获取信息,而不是填写

    之前有会员来信提到希望能够找一期时间聊一聊在应用中的表单设计,当时我爽快的答应了但却一直没有写. 其实没写的主要原因还是在于网络上已经有了很多关于表单设计的讨论,这些文章都提到了很多在表单设计中需要注 ...

  9. textfield获取其中内容_用户认知视角下的产品信息获取体验度量体系研究

    文 / 张凯 孙宁娜 崔学伟 ( 南京艺术学院 工业设计学院:江苏大学 艺术学院 ) DOI编码:10.3969/J.ISSN.1674-4187.2020.03.006 摘要:从用户认知视角出发,结 ...

最新文章

  1. 差异与阵列和阵列结构和链表的区别
  2. Hello Blazor:(11)全局截获事件执行
  3. python gamma函数_python gamma矫正
  4. redlock java_分布式Redis的分布式锁Redlock
  5. Unity(TransForm)
  6. 动态插入图片到 svg 中
  7. 我的世界源代码java复制_《我的世界》你做主,微软逐步开放源代码
  8. React Native跨平台移动应用开发框架介绍
  9. 微信服务号如何绑定腾讯云服务器
  10. Java int 最大值溢出
  11. indesign排版标点挤压_孔雀计划序——中文排版思路的重建
  12. ubantu桌面,compiz特效和配置
  13. unable to find valid certification path to requested target的异常解决办法
  14. HDU6069(数学)
  15. LIO-SAM imageProjection
  16. Redis数据库中Hash哈希的介绍,常用命令和应用场景
  17. 优化巨量关键词的匹配(转载笔记)
  18. 企业WiFi解决方案 安全上网很重要
  19. jQuery——简洁的javaScript库
  20. 大数据性能测试工具Dew --转载自李智慧

热门文章

  1. python回归模型 变量筛选_如何进行高维变量筛选和特征选择(一)?Lasso回归
  2. MyLiveSearch:它将会革掉Google的命?
  3. BestCoder-Round#38
  4. xaml修改后台代码的值_Django定制后台和修改模型
  5. idea shell 中的函数 跳转_PHP如何为函数执行设置超时?
  6. webrtc 语音流java_通过WebView WebRTC从麦克风传输语音时的语音识别
  7. 图像条纹检测 python_【连载2.1】结构光三维检测引言面向强反射表面的多传感器三维检测技术研究...
  8. 20210903 惯性环节1/(s+1)的各种响应
  9. JavaScript原始类型转换和进制转换
  10. 报错 findMergedAnnotation activemq