Perl 如何在不等待调用返回的情况下进行系统调用并恢复执行?

Perl 如何在不等待调用返回的情况下进行系统调用并恢复执行?,perl,system-calls,Perl,System Calls,基本上,我想使用system()、exec()、back ticks或其他方法来进行系统调用,但随后在调用脚本中立即恢复执行,而不关心调用的结果以及它是否返回、终止、暂停等等 是否可以在不穿线/分叉的情况下执行此操作?使用shell的后台操作符&: system("some command &"); 使用shell的后台操作符&: system("some command &"); 简短回答,否。这就是fork()的全部要点。唯一的问题是,您是直接调用fork(),还是让其他

基本上,我想使用system()、exec()、back ticks或其他方法来进行系统调用,但随后在调用脚本中立即恢复执行,而不关心调用的结果以及它是否返回、终止、暂停等等


是否可以在不穿线/分叉的情况下执行此操作?

使用shell的后台操作符
&

system("some command &");

使用shell的后台操作符
&

system("some command &");

简短回答,否。这就是
fork()
的全部要点。唯一的问题是,您是直接调用
fork()
,还是让其他东西来为您执行此操作

如前所述,您可以使用shell的background操作符(
&
)来实现这一点,但随后您使用的是shell,这带来了常见的字符串注入攻击问题

system("some command with args &");
更直接地说,您可以只执行通常的
fork()
exec()
,然后不执行通常发生的
waitpid()
,这就是阻塞发生的地方:

if(fork() == 0) {
  exec("some", "command", "with", "args") or die "Cannot exec - $!";
}
# No waitpid here so no waiting
如果您正在这样做,最好在子对象最终退出时插入一个
SIGCHLD
处理程序以忽略,这样就不会留下僵尸。在代码开头附近的某个点,将

$SIG{CHLD} = 'IGNORE';

简短回答,否。这就是
fork()
的全部要点。唯一的问题是,您是直接调用
fork()
,还是让其他东西来为您执行此操作

如前所述,您可以使用shell的background操作符(
&
)来实现这一点,但随后您使用的是shell,这带来了常见的字符串注入攻击问题

system("some command with args &");
更直接地说,您可以只执行通常的
fork()
exec()
,然后不执行通常发生的
waitpid()
,这就是阻塞发生的地方:

if(fork() == 0) {
  exec("some", "command", "with", "args") or die "Cannot exec - $!";
}
# No waitpid here so no waiting
如果您正在这样做,最好在子对象最终退出时插入一个
SIGCHLD
处理程序以忽略,这样就不会留下僵尸。在代码开头附近的某个点,将

$SIG{CHLD} = 'IGNORE';

你在unix上吗?然后将命令作为后台进程启动:
system('command>/dev/null&')
。还有,我在经营卢本图<代码>/dev/null 2>&1&似乎已经成功了。谢谢你在unix上吗?然后将命令作为后台进程启动:
system('command>/dev/null&')
。还有,我在经营卢本图<代码>/dev/null 2>&1&似乎已经成功了。谢谢