web-dev-qa-db-ja.com

kthreaddプロセスと子とは何であり、initや子とはどう違うのか

kthreadとは何か、なぜメモリを消費せず、開いているファイルがないのかを知りたいと思いました。使用中のVMZ、RSS、スレッド、オープンファイルなどの追加情報とともに、現在実行中のプロセスのPIDを親子ツリー形式で単に印刷するコードを作成しました。 kthreaddという名前のPID 2のすべての子には、/proc/[pid]/statusファイルにVmSizeとVmRSSがありませんでした。 /proc/[pid]/fdには開いているファイルが含まれていませんでした。

これらのプロセスとは何か、init(PID 1)によって生成される通常のプロセスとの違い。 (古い本で)スワッパーがinit PID1を生成し、他のすべてのプロセスがPID 1の子であることを読みました。もう1つの質問は、PID 2がPID 0の子であり、PID 1の子ではない理由です。

26
phoxis

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

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

プロセスをinitの子にするためには、initからクローンを作成する必要があり、Kthreadsが親PIDが0で「no-one」を意味する理由ではありません。

33
MSI