perl fork()& EXEC()

时间:2012-09-25 21:45:51

标签: perl parallel-processing exec fork

我正在努力掌握fork()&的概念。 exec()用于我自己的学习目的。我正在尝试使用perl fork作为第二个相同的进程,然后使用它来执行.sh脚本。

如果我使用fork()& exec()我可以让.sh脚本与我的perl脚本并行运行吗? Perl脚本不会等待子进程并继续执行。所以我的perl脚本并不关心子进程的输出,而只关心命令有效并且正在运行。有点像调用脚本在后台运行。

我是否可以通过某种安全措施来了解子进程是否正确退出?

2 个答案:

答案 0 :(得分:5)

  

如果我使用fork()& exec()我可以让.sh脚本与我的perl脚本并行运行吗? [...]有点像调用脚本在后台运行。

是。叉子和exec实际上是shell在后台运行命令的方式。

  

我是否可以通过某种安全措施来了解子进程是否正确退出?

是的,使用waitpid()并查看$?

中存储的返回值

与提到的@rohanpm一样,perlipc手册页有很多有用的示例,说明如何执行此操作。这是最相关的一个,其中为SIGCHLD设置了一个信号处理程序(当孩子终止时将发送给父母)

use POSIX ":sys_wait_h";
$SIG{CHLD} = sub {
    while ((my $child = waitpid(-1, WNOHANG)) > 0) {
        $Kid_Status{$child} = $?;
    }
};

答案 1 :(得分:3)

让waitpid不等孩子:

use POSIX qw/ WNOHANG /;
my $st = waitpid $pid, WNOHANG;

如果进程仍在运行,$ st为0,如果收到pid,则为pid。