Linuxにプロセスを消すことはできますか?

Linuxにプロセスを消すことはできますか?

私のプロセスの1つがOOM Killerによって終了しました。これにより、LinuxカーネルがSIGKILLを送信する理由が何であるかを考えるようになりました。私は、順番にプロセスを終了する理由を知っているという意味です。

しかし、Linuxカーネルにはプロセスを削除する機能がありますか?他のどのプロセスも削除されたプロセスに何が起こったのかわかりませんか?構造からそのベクトルとアイテムを削除して続行しますか?

おそらく、これはこのプロセスの合理的な動作に依存する他のすべてのプロセスを危険にさらすでしょう。しかし、これらの行動の不合理性を考慮すると、それは公平に見えます。明らかに、質問は「すべきか」ではなく「できるか」に近いです。本番データベースサーバーはこれを行わないと約束します。

答え1

プロセスは真空状態では存在しない。彼らは彼らを待っている親(そしておそらく子供)プロセスを持っています。彼らはまた、他の人が必要とするリソースを持っているかもしれません。

だから、ただ消えるのはうまくいきません。多くの作業が必要で、システムの他の部分に通知する必要があります。

単に信号を送信するのではなく、信号を送信する理由ただすぐにできますか?まあ、それはきれいな方法であり、ロジックを再利用することができます。捕捉されていない信号SIGTERM(または捕捉された後に終了した信号)は、ほぼ同じことを行います。また、親に状況を一貫して報告し、単一のコードですべての状況を処理することもできます。

関連情報