【问题标题】:Perl: launch a shell script and proceed without waiting [duplicate]Perl:启动一个shell脚本并继续而不等待[重复]
【发布时间】:2014-04-08 19:33:28
【问题描述】:

我有一个运行不同 Perl 脚本的系统,我想截取这些脚本的某些参数并将它们传递给我的自定义 shell 脚本。

这就是我所拥有的:

#!/usr/bin/microperl
[...]

if ($number) {
    if (&number_is_b($number)) {
        system("touch $STATE_LOCKED1");
        print 1;
    }
    else {
        system("/script/myscript.sh $number");
        print 2;
    } 
}
else {
    [...]
}

我添加的是

system("/script/myscript.sh $number");

调用下面的shell脚本传递参数$number

#!/bin/sh
result=$(wget -qO- http://x.x.x.x/result?qs=$1)
[...]

现在一切正常,但我希望原始 Perl 脚本继续运行,而无需等待 shell 脚本的结果,因为 wget 可能需要一些时间。我需要 Perl 脚本自主进行,而不关心 shell 是否成功完成。

是否有可能让它启动,有些人如何忘记它并继续?

您对我如何做到这一点有什么建议吗?

【问题讨论】:

标签: perl shell


【解决方案1】:

一种可能使其工作的方法是将 & 附加到您的命令以使其在后台运行。不过,这并不总是适用于每个版本的 unix。但值得一试。

system("/script/myscript.sh $number &");

如果这不起作用,我知道还有两个其他选项。一种方法是使用叉子。 http://perldoc.perl.org/functions/fork.html 。这种方法可能需要一些努力。

还有一个模块Proc::Background,它允许你在windows和unix的后台运行一个进程。

【讨论】:

  • 您好,感谢您的快速回复。实际上,如果在系统调用中使用“&”似乎不起作用。 :( 如果在命令行中使用它可以工作...我会尝试了解如何使用 fork ..
  • @d82k 我一直在寻找这方面的更多信息,因为我也有一些用途。看起来 perl 模块 Proc::Background 实际上可能是理想的方式。
  • 你也可以fork然后使用exec
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多