zoukankan      html  css  js  c++  java
  • fork()子进程与waitpid()

     1 #!/usr/bin/perl
     2 use warnings;
     3 use strict;
     4 use POSIX ":sys_wait_h";
     5  
     6 $SIG{CHLD} = sub{
     7   my $pid;
     8   while($pid = waitpid(-1, WNOHANG) > 0){
     9     print "$pid ----------进程已回收!----------------
    "
    10   }
    11 };
    12 foreach(1..5){
    13   my $forpid = fork();
    14   if($forpid == 0){
    15     foreach('a'..'z'){
    16       print "这是子进程".$_."
    ";
    17     }
    18     print "子进程结束!
    ";
    19     #sleep(10);
    20     exit 0;
    21   }
    22   else{
    23     print "这里父进程!
    这要比子进程晚退出才能收到waitpid的返回值!
    ";
    24     print "Done
    ";
    25     #my $pid = wait();
    26     sleep(10);
    27   }
    28 }

    在这里, 如果在父进程中改用wait()会出现阻塞
    每一个子进程退出后会向父进程发送chld信号
    waitpid()中-1表示等待所有子进程, wnohang表示不阻塞
    waitpid()返回子进程的进程ID, 出错返回-1

  • 相关阅读:
    Java原始数据类型
    Java文件教程
    Java.util.ArrayDeque类
    Java 简介
    面向对象的程序设计
    Java8默认方法
    divide方法
    java.lang.Boolean.compareTo()方法实例
    AWT Button类
    Java的核心优势
  • 原文地址:https://www.cnblogs.com/perl6/p/6136211.html
Copyright © 2011-2022 走看看