Linux デバイスで強制終了されたすべてのプロセスを一覧表示する方法はありますか?
この回答が示唆するのを見ました:
チェックイン:
/var/log/kern.log
しかし、それは一般的ではありません。それを行う他の方法はありますか?
私がしたいこと:
スレッド/プロセスが強制終了された場合に一覧表示します。カーネルのどの関数を編集して、強制終了されたすべての tid/pid とその名前を一覧表示する必要がありsysfs
ますか?
Linux デバイスで強制終了されたすべてのプロセスを一覧表示する方法はありますか?
この回答が示唆するのを見ました:
チェックイン:
/var/log/kern.log
しかし、それは一般的ではありません。それを行う他の方法はありますか?
スレッド/プロセスが強制終了された場合に一覧表示します。カーネルのどの関数を編集して、強制終了されたすべての tid/pid とその名前を一覧表示する必要がありsysfs
ますか?
の反対do_fork
はdo_exit
、ここにあります:
do_exitカーネルソース
次の場合を除いて、スレッドがいつ終了するかを見つけることができません。
Linuxでは「タスク」と「スレッド」は(ほぼ)同義語だと思います。
まず、タスクとスレッドのコンテキストがカーネル内で異なります。タスク (タスクレット api を使用) はソフトウェア割り込みコンテキストで実行されます (つまり、タスク ctx にいる間はスリープできません)。一方、スレッド (kthread api またはワークキュー api を使用) はプロセス ctx (つまり、スリープ可能な ctx) でハンドラーを実行します。
どちらの場合も、カーネルでスレッドがハングすると、スレッドを強制終了できません。シェルから「ps」コマンドを実行すると、そこに表示されますが(通常は「[」と「]」の中括弧を使用)、強制終了しようとしても機能しません。
カーネルは信頼できるコードであるため、このような状況は発生しないはずです。発生した場合は、カーネル (またはカーネル モジュール) のバグを示しています。
通常、そのスレッドを実行しているコアが応答していないため、しばらくするとマシン全体が処理されます (/var/log/messages またはコンソールにメッセージが表示され、詳細情報が表示されます)。死んでいる。カーネル構成に依存します。