gpt4 book ai didi

perl - 如何使用 `pipe` 促进 Perl 中的进程间通信?

转载 作者:行者123 更新时间:2023-12-01 12:00:15 26 4
gpt4 key购买 nike

谁能解释我如何才能成功地让我的进程进行通信?我发现 IPC 上的 perldoc 令人困惑。

我目前拥有的是:

$| = 1;
$SIG{CHLD} = {wait};
my $parentPid = $$;

if ($pid = fork();) ) {
if ($pid == 0) {
pipe($parentPid, $$);
open PARENT, "<$parentPid";
while (<PARENT>) {
print $_;
}
close PARENT;
exit();
} else {

pipe($parentPid, $pid);
open CHILD, ">$pid";
or error("\nError opening: childPid\nRef: $!\n");
open (FH, "<list")
or error("\nError opening: list\nRef: $!\n");

while(<FH>) {
print CHILD, $_;
}

close FH
or error("\nError closing: list\nRef: $!\n");
close CHILD
or error("\nError closing: childPid\nRef: $!\n);
} else {
error("\nError forking\nRef: $!\n");
}
  • 首先:perldoc pipe 是什么? READHANDLE, WRITEHANDLE 是什么意思?

  • 第二:不依赖CPAN或其他模块是否可以实现解决方案?

alt text
(来源:wellho.net)

最佳答案

这是一个基于 perldoc perlipc 中代码的简化示例:

#!/usr/bin/perl

use strict; use warnings;

$SIG{CHLD} = sub { wait };

pipe my $reader, my $writer;

my $pid = fork;
defined $pid or die "fork failed: $!";

if ( $pid ) { # parent
close $reader;
for my $n ( 1 .. 5 ) {
select $writer;
$| = 1;
print $writer "Message $n\n"
or die "Failed to pass message to child: $!";
sleep 1;
}
close $writer;
exit;
}
else { # child
close $writer;
while ( my $msg = <$reader> ) {
print "Child received: $msg";
last if rand > 0.5; # to check error handling in parent
}
close $reader;
exit;
}

关于perl - 如何使用 `pipe` 促进 Perl 中的进程间通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2558098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com