在Perl中,如何进行非阻塞系统调用?

Ros*_*ers 2 perl

在Perl中,不使用__CODE__库,产生系统调用的最简单方法是什么,以便它是非阻塞的?你能避免这样做__CODE__吗?

编辑澄清.我想避免对fork进行明确而混乱的调用.

Ian*_*and 10

你的意思是这样的吗?

system('my_command_which_will_not_block &');
Run Code Online (Sandbox Code Playgroud)

正如Chris Kloberdanz指出的那样,这将隐式调用fork() - perl实际上没有其他办法可以做到这一点; 特别是如果你希望perl解释器在命令执行时继续运行.

&命令中的字符是shell元字符 - perl看到这个并将参数传递system()给shell(通常是bash)以便执行,而不是直接通过execv()调用运行它.&告诉bash再次fork,在后台运行命令,然后立即退出,在命令继续执行时将控制权返回给perl.