我正在努力理解fork()和exec()的概念,以便于自己的学习目的。我正在尝试使用perl fork作为第二个相同的进程,然后使用它来执行.sh脚本。
如果我使用fork()和exec(),我能够让.sh脚本与我的perl脚本并行运行吗?Perl脚本不等待子进程并继续执行。因此,我的perl脚本并不关心子进程的输出,而只关心命令是否有效并正在运行。有点像在后台调用脚本运行。
我可以实现某种安全性来确保子进程正确退出吗?
我正在努力理解fork()和exec()的概念,以便于自己的学习目的。我正在尝试使用perl fork作为第二个相同的进程,然后使用它来执行.sh脚本。
如果我使用fork()和exec(),我能够让.sh脚本与我的perl脚本并行运行吗?Perl脚本不等待子进程并继续执行。因此,我的perl脚本并不关心子进程的输出,而只关心命令是否有效并正在运行。有点像在后台调用脚本运行。
我可以实现某种安全性来确保子进程正确退出吗?
$?
中的返回值。SIGCHLD
的信号处理程序(当子进程终止时将发送给父进程)。use POSIX ":sys_wait_h";
$SIG{CHLD} = sub {
while ((my $child = waitpid(-1, WNOHANG)) > 0) {
$Kid_Status{$child} = $?;
}
};
$SIG{ CHLD } = sub { ... }
),然后在其中使用wait() / waitpid()。perlipc中有一个示例。 - rohanpm要让waitpid不等待子进程:
use POSIX qw/ WNOHANG /;
my $st = waitpid $pid, WNOHANG;
$st的值为0表示该进程仍在运行,若已结束则为其pid。
wait
和waitpid
。 - mob