可能重复:
如何在后台运行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