如果我运行以下内容:
Process.kill "KILL", pid
Process.wait pid
raise "application did not exit" if not $?.exited?
raise "application failed" if not $?.success?
我收到错误“应用程序没有退出”。为什么Process.wait
没有等待?更准确地说,为什么Process.wait
将$?
设置为未退出状态?
答案 0 :(得分:0)
进程在收到kill信号后立即退出,因此Process.wait会立即将相应的Process :: Status对象分配给$?并允许执行继续。流程::状态#退出?只有当进程正常退出时才返回true,所以你看到的是预期的行为 - SIGKILL通常不会导致正常终止。
答案 1 :(得分:0)
来自Process::Status
文档:
Posix系统使用16位记录有关进程的信息 整数。低位记录过程状态(停止, 退出,发信号)并且高位可能包含其他内容 信息。
状态exited
意味着该过程自行退出(称为exit()
的过程)。但是,由于你强行杀死了这个进程,它的状态将改为signaled
,这意味着由于未被捕获的信号(在这种情况下为KILL
)而退出该进程。