有没有像'system'这样的Perl函数不等待返回值?



可能重复:
如何在后台运行Perl系统命令?

我有一个简单的Perl程序,它根据if语句的结果触发另一个进程。但是,在触发的过程完成之前,我无法继续发送命令。我认为这是因为"system"函数在继续之前等待进程的返回值。

while (bla bla bla) {
  if (command is bla) { 
    system("osascript 'something.app'");
  } else { 
    print $client "invalid commandrn";
  } 
} continue {
  …etc

简而言之,我的脚本在收到something.app的回复之前不会继续。有什么办法吗?

fork中的exec将在不阻塞执行的情况下工作:

if (command is bla) { 
    exec "osascript 'something.app'" if fork;
} else { 
    print $client "invalid commandrn";
}

在Unix/Linux上,您可以"关闭">

system( "osascript 'something.app' & " );

正在添加"&"告诉shell在后台运行进程。我不记得"孙子"进程是否被重新设置了父子关系,所以当子进程退出时,您可能需要一个SIGCHLD处理程序来获取它们。

我想有一种方法可以在窗户上做同样的事情,但我现在记不起来了。也许是"启动/b"。

http://perldoc.perl.org/functions/system.htmlhttp://perldoc.perl.org/perlipc.html#Signals

最新更新