为什么在Perl中waitpid会返回错误的退出代码?

Pau*_*kis 2 perl exit-code waitpid

我从waitpid得到错误的退出代码,我无法弄清楚原因.有人可以给我一些想法吗?

我在这做什么:

  1. 我开始我的孩子过程 open2
  2. 然后我等待它完成 waitpid
  3. 使用获取退出代码 $?

从子进程返回的内容总是以-1为单位返回.我检查VS调试器我的程序返回退出代码0. VS说这样的事情:

The program '[3256] Test.exe: Native' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

我确保pids匹配.

有任何想法吗?

Pau*_*kis 7

我刚想通了.waitpid有3个阶段:

 1. process is running:    waitpid returns 0;   $? is -1
 2. process is exiting:    waitpid returns pid; $? is actual exit code
 3. process doesn't exist: waitpid returns -1;  $? is -1
Run Code Online (Sandbox Code Playgroud)

所以当做某些事情(waitpid($ pid,WNOHANG)> = 0)时,必须在此之前的一个周期内检索退出代码.