/proc
すべてのプロセスを見つけるためにディレクトリ(または疑似ファイルシステム)を読み込んでいます。私はそれから必要な情報を取得していますが、/proc/[pid]/status
別のものが必要です。どのプロセスがシステムにとって重要であるかを理解する方法はありますか?たとえば、プロセスの親pidまたはUIDを使用しますか?
システムプロセスとは、オペレーティングシステムの新規インストールとアプリケーションまたはサービスのインストール前に存在するプロセスを意味します。これはカーネルスレッドやシステムプロセスをまったく意味しないかもしれませんが、要約すると、プロセス、プロセス終了、会議システムの基本構造を破壊します。
PS。 Androidアプリを開発していますが、この部分は純粋なLinuxファイルシステムを使用して進行しているので、ここに質問をしたところ、あまり違いはないようです。
ベストアンサー1
その場合は、+を押してカーネルスレッドの表示を切り替えるhtop
ことができます。ツリーモードを押すと、すべての子として表示されます。ShiftkF5kthreadd
そこはいカーネルスレッドとユーザー空間スレッドのいくつかの注目すべき違いは次のとおりです。
/proc/$pid/cmdline
カーネルスレッドの場合、NULL - psとtopがカーネルスレッドを区別する方法です。シンボリック
/proc/$pid/exe
リンクにカーネルスレッドのターゲットはありません。これは、ファイルシステムに対応する実行ファイルがないため意味があります。具体的には、
readlink()
ENOENT
リンク自体は存在しますが、システムコールは「対応するファイルやディレクトリがありません」を返し、プロセスの実行可能ファイルが存在しないことを示します。したがって、カーネルスレッドを確認する信頼できる方法は、対応する戻りコードを呼び出して確認すること
readlink()
です。成功するとユーザープロセス/proc/$pid/exe
です。$pid
失敗して表示された場合は、アドインを介してカーネルスレッドとENOENT
終了したばかりのプロセスを区別する必要があります。stat()
/proc/$pid/exe
/proc/$pid/status
ほとんどのカーネルスレッドには、いくつかのフィールド、特に仮想メモリに関連するいくつかのフィールドがありません。
上記の回答は次のようになります。カーネルスレッドの識別
カーネルスレッドを他のプロセスと区別する別の方法はtop -c
。top
マニュアルから:
3. コマンド - コマンド名またはコマンドライン
ジョブの開始に使用されるコマンドラインまたは関連プログラムの名前を表示します。コマンドラインオプションとインタラクティブコマンド「c」を使用して、コマンドラインと名前を切り替えることができます。コマンドラインを表示を選択すると、コマンドラインのないプロセス(カーネルスレッドなど)は、次の例に示すように、括弧内にプログラム名のみを表示します。
[ mdrecoveryd ]
実行中は、ps aux
角かっこ内にコマンドなしで開始されたプロセスも表示されます(そして空の/proc/[pid]/cmdline
ファイルが表示されます)。
例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 19 0.0 0.0 0 0 ? S< Mar02 0:00 [kworker/1:0H]
包装ビューprocps-3.2.8
文書/proc/readproc.h
。
// Basic data structure which holds all information we can get about a process.
// (unless otherwise specified, fields are read from /proc/#/stat)
//
// Most of it comes from task_struct in linux/sched.h