加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何判断分叉的子节点在Perl中终止?

发布时间:2020-12-15 23:27:37 所属栏目:大数据 来源:网络整理
导读:如何在分叉进程之间共享相同的变量?或者,我是否需要写入父文件中的文件,然后在文件存在后读取保存到子文件中的值? $something似乎永远不会在此设置,所以它只是在睡眠中循环 my $something = -1;doit();sub doit{ my $pid = fork(); if ($pid == 0) { while
如何在分叉进程之间共享相同的变量?或者,我是否需要写入父文件中的文件,然后在文件存在后读取保存到子文件中的值? $something似乎永远不会在此设置,所以它只是在睡眠中循环

my $something = -1;
&doit();
sub doit
{

 my $pid = fork();
 if ($pid == 0)
 {
      while ($something == -1)
      {
         print "sleep 1n";
         sleep 1;
      }
      &function2();
 }
 else
 {
     print "parent startn";
    sleep 2;
    $something = 1;
    print "parent end: $somethingn";
 }
}

sub function2 {
   print "ENDn";
}

解决方法

perldoc -f fork

File descriptors (and sometimes locks on those descriptors) are shared,while everything else is copied.

参见perldoc perlipc中的Bidirectional Communication with Yourself.

更新:第二个想法,你想要这样的东西吗?

#!/usr/bin/perl

use strict;
use warnings;

my $pid = fork;

die "Cannot fork: $!" unless defined $pid;

if ($pid == 0) {
    print "Child startn";
    my $end;
    local $SIG{HUP} = sub { $end = 1 };

    until ($end) {
        print "Sleep 1n";
        sleep 1;
    }
    function2();
}
else {
    print "Parent startn";
    sleep 5;
    kill HUP => $pid;
    waitpid($pid,0);
}

sub function2 {
    print "ENDn";
}

输出:

C:Temp> w
Parent start
Child start
Sleep 1
Sleep 1
Sleep 1
Sleep 1
Sleep 1
END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读