【发布时间】:2016-01-19 23:52:28
【问题描述】:
目前,我正在尝试通过让 proc A 创建 proc B 和 proc B 创建 proc C 来创建一个孤立进程。然后,我想杀死 proc B 以便 proc C 不再附加到 proc 的进程树A.但是,我也想知道proc A中proc C的进程ID。到目前为止,我已经尝试过:
use FileHandle;
pipe(READ, WRITE);
WRITE->autoflush();
my $pid1 = fork();
if ($pid1) {
#Proc A
waitpid($pid1, 0);
close WRITE;
my $msg = <READ>;
print "msg: $msg\n";
} elsif ($pid1 == 0) {
#Proc B
my $pid2 = fork();
if ($pid2) {
#Proc B
print WRITE $pid2;
exit 0;
} elsif ($pid2 == 0) {
#Proc C
print "child 2 proc $$\n";
sleep(5);
exit 0;
}
}
不幸的是,运行它会使 proc A 等待 proc C 完成(睡眠 5),然后才打印出我不想要的 proc C 的 id。一旦proc B退出,有没有办法让waitpid函数返回?
或者,有没有更好的方法来创建孤立进程?
编辑:添加了有关读/写管道的信息。
【问题讨论】:
标签: linux perl parallel-processing