我尝试过将 system() 与 fork() 一起使用,尝试过 exec(),但仍然没有得到我需要的东西。
我想编写一个 Perl 脚本,比方说,连续五次执行不同的 Perl 脚本(向它发送不同的参数值),但我让它同时运行。我意识到我可以将脚本转换为 .pm 文件并引用它,但我更愿意让子脚本独立于父脚本...
- system() 工作,但执行 连续命令(有意义 根据文档)
- exec() 不起作用 - 它只执行 第一种方法(每 文档)
- 我给子 Perl 添加了一个 fork() 脚本,然后尝试使用 system()
- 这也不起作用。
- 反引号命令 ' 文件说了 与 system() 一样工作......
在 Perl(我使用的是 Windows XP)中没有一种简单的方法来执行一个进程,而不关心返回值或任何东西,只是继续进入父脚本的下一行吗?
最佳答案
你可以这样做(在父级中 fork,在子级中执行):
for my $cmd qw(command1 command2 command3) {
exec $cmd unless fork
}
exec $cmd unless fork
的工作方式是 fork
将在父进程(进程 ID)中返回一个真值,并在子,因此 exec $cmd
仅在 fork
返回 false(又名,在子中)时运行。
或者,如果您想密切关注并发运行的进程:
my @procs;
for my $cmd qw(cmd1 cmd2 cmd3) {
open my $handle, '-|', $cmd or die $!;
push @procs, $handle;
}
如果需要,您可以从 @procs
的元素中读取。
或者查看许多 CPAN 模块中的一个,例如处理 fork 管理细节的 Forks::Super
。
关于windows - 如何执行外部 Windows 命令并立即返回 Perl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928144/