perl中的非阻塞waitpid()

pac*_*tie 1 perl

我试图做非阻塞waitpid,根据perl手册页,waitpid($pid, WNOHANG);会做.但以下似乎是封锁.printf的结果将需要2秒才能显示出来.

$pid = fork;
if (!$pid) {
    exec("sleep 2");
}
waitpid($pid,  WNOHANG);
$retCode = $?;
printf "%04x\n", $retCode;
Run Code Online (Sandbox Code Playgroud)

小智 7

错误编号1:您没有启用警告.

错误2:你没有申报WNOHANG.所以它是一个裸字,它变成了字符串'WNOHANG'.当解释为数字时,字符串变为0而没有警告,因为它看起来不像数字.所以你waitpid用flags = 0 调用,而不是你想要的WNOHANG标志.

use warnings;
use POSIX 'WNOHANG';
Run Code Online (Sandbox Code Playgroud)