0

If I run the following:

Process.kill "KILL", pid
Process.wait pid
raise "application did not exit" if not $?.exited?
raise "application failed" if not $?.success?

I get the error "application did not exit". Why is Process.wait not waiting? More precisely, why does Process.wait set $? to a not-exited status?

4

2 回答 2

0

进程收到kill信号后立即退出,因此Process.wait立即将相应的Process::Status对象分配给$? 并允许继续执行。进程::状态#已退出?仅当进程正常退出时才返回 true,因此您看到的是预期行为—— SIGKILL 通常不会导致正常终止。

于 2012-08-09T16:18:09.863 回答
0

Process::Status文档中:

Posix 系统使用 16 位整数记录有关进程的信息。低位记录进程状态(已停止、已退出、已发出信号),高位可能包含附加信息。

状态exited将意味着进程自行退出(称为 的进程exit())。但是由于您强行终止了该进程,它将具有signaled相反的状态,这意味着该进程由于未捕获的信号而退出(KILL在这种情况下)。

于 2012-08-09T16:18:36.623 回答