gpt4 book ai didi

perl - fork + exec + caller 不应该等待 child

转载 作者:行者123 更新时间:2023-12-02 04:00:39 24 4
gpt4 key购买 nike

我有两个脚本 script_a 和 script_b。
script_a 调用 script_b。 script_b fork 两个进程。如下所示。

script_a 等待 script_b 的父级和子级都完成。
我希望 script_a 继续而不等待 script_b 的子进程。

我为此所做的是在 script_b 中,我添加了以下代码。

if (! $f_id) {
close STDOUT;
close STDERR;
exec("sleep 10; echo 'i am child'");
}

这对我有用。 script_a 不再等待子进程。

我的问题是,
1. 这是正确的方法吗?
2. 父进程和子进程是否共享相同的 STDOUT 和 STDERR,如果存在竞争条件,我最终会遇到麻烦吗?
3. 有没有更好的方法来做到这一点?

在此先感谢您的帮助。

script_a.pl
#! /usr/local/bin/perl
print `script_b.pl`;

script_b.pl
#! /usr/local/bin/perl

$f_id = fork();

if (! $f_id) {
exec("sleep 10; echo 'i am child'");
}

if ($f_id) {
print "i am parent\n";
}

最佳答案

而不是在 script_a 中使用 ``。我们在 script_a 中重定向了 STDOUT 和 STDERR。
就像是

脚本_a

system("script_b.pl > /var/tmp/out_file 2>&1");

脚本_b
#! /usr/local/bin/perl

$f_id = fork();

if (! $f_id) {
exec("sleep 10; echo 'i am child'");
}

if ($f_id) {
print "i am parent\n";
}

这样调用者就不会等待 exec 中的子进程完成。

感谢您的帮助。

关于perl - fork + exec + caller 不应该等待 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10698103/

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