0

次を実行すると:

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設定されるのですか?$?

4

2 に答える 2

0

Process::Statusドキュメントから:

Posix システムは、16 ビット整数を使用してプロセスに関する情報を記録します。下位ビットはプロセスのステータス (停止、終了、通知) を記録し、上位ビットには追加情報が含まれる可能性があります。

のステータスはexited、プロセスが単独で終了したことを意味します (呼び出されたプロセスexit())。ただし、プロセスを強制signaled終了したため、代わりにステータスが表示されます。これは、シグナルがキャッチされなかったためにプロセスが終了したことを意味します(KILLこの場合)。

于 2012-08-09T16:18:36.623 に答える
0

プロセスは kill シグナルを受信した直後に終了したため、Process.wait はすぐに適切な Process::Status オブジェクトを $? に割り当てます。実行を継続できるようにします。プロセス::ステータス#終了? プロセスが正常に終了した場合にのみ true を返すため、表示されているのは予想される動作です。通常、SIGKILL は通常の終了を引き起こしません。

于 2012-08-09T16:18:09.863 に答える