windows - 如何执行外部 Windows 命令并立即返回 Perl?

标签 windows perl

我尝试过将 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/

相关文章:

mysql - Windows 7 中 mysql 服务器的默认数据文件夹在哪里

c++ - 在 Windows 中检索全局钩子(Hook)链

windows - 在 Windows 10 中使用 powershell 在多个桌面上启动程序

Perl 重复字符串具有重复的子字符串

windows - Taskkill退出代码: 255

perl - Perl 的 "$a"函数中的 "$b"和 "sort()"到底是什么?

python - 数独混淆 python -> perl 翻译

perl - 如何使用Perl获取文件的目录名?

perl - 为什么 DBIx::Class 不创建多对多访问器?

c - 系统和CreateProcess()