45

kthreadメモリを消費せず、開いているファイルがない理由とその理由を知りたかったのです。使用中の VMZ、RSS、スレッド、openfiles などの追加情報とともに、現在実行中のプロセスの PID を親子ツリー形式で単純に出力するコードをいくつか書きました。指定された PID 2 のすべての子にはkthreadd、ファイルに VmSize と VmRSS がありませんでした/proc/[pid]/status。開いているファイルが含まれて/proc/[pid]/fdいませんでした。

これらのプロセスとは何か、init (PID 1) によって生成された通常のプロセスとどのように異なるか。(古い本で) スワッパーは init PID1 を生成し、他のすべてのプロセスは PID 1 の子プロセスであると読みました。明らかに、この背後には別のアーキテクチャ (Linux カーネル 3.7.10.1-16) があり、それはわかりません。別の質問は、なぜ PID 2 が PID 0 の子であり、 PID 1 の子ではないのかということです。

4

1 に答える 1

53

カーネル スレッドは、すべてのユーザー空間プロセスの前に開始できるため、init の子ではありません。

これらは通常、ハードウェアの管理に使用されるため、カーネルによって直接処理され、優先度が高くなります。

プロセスが init の子になるには、init から複製する必要があり、Kthreads はそうではありません。そのため、親の PID は 0 であり、「誰もいない」ことを意味します。

于 2014-01-24T18:46:07.363 に答える