Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl fork();行政长官()_Perl_Parallel Processing_Exec_Fork - Fatal编程技术网

perl fork();行政长官()

perl fork();行政长官(),perl,parallel-processing,exec,fork,Perl,Parallel Processing,Exec,Fork,为了我自己的学习目的,我试图掌握fork()和exec()的概念。我试图使用perl fork作为第二个相同的进程,然后使用它来执行一个.sh脚本 如果我使用fork()&exec(),我可以让.sh脚本与perl脚本并行运行吗?Perl脚本不等待子进程,而是继续执行。因此,我的perl脚本不关心子进程的输出,只关心命令是否有效并正在运行。有点像调用脚本在后台运行 我是否可以实现某种安全机制来确保子进程也正确退出 如果我使用fork()&exec(),我可以让.sh脚本与perl脚本并行运行吗?

为了我自己的学习目的,我试图掌握fork()和exec()的概念。我试图使用perl fork作为第二个相同的进程,然后使用它来执行一个.sh脚本

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

我是否可以实现某种安全机制来确保子进程也正确退出

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

对。Fork&exec实际上是shell在后台运行命令的方式

我是否可以实现某种安全机制来确保子进程也正确退出

是,使用并查看存储在
$?

就像@rohanpm提到的,手册页有很多有用的例子来说明如何做到这一点。这里是一个最相关的示例,其中为
SIGCHLD
设置了一个信号处理程序(当子进程终止时,将发送给父进程)


要使waitpid不等待子项,请执行以下操作:

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

如果进程仍在运行,$st是0,如果收获了,则pid是0。

请参见和。但是如果使用waitpid(),perl脚本不会停止并等待子进程吗?是的,waitpid()会停止。但是,当子进程退出时,Unix信号SIGCHLD将传递给父进程,因此您可以安装信号处理程序(
$SIG{CHLD}=sub{…}
)并在其中执行wait()/waitpid()。有这样一个例子。谢谢@rohanpm,我编辑了我的答案来展示一个如何做到这一点的例子
use POSIX qw/ WNOHANG /;
my $st = waitpid $pid, WNOHANG;