2012-01-21 20 views
1

私は、プロセス/スレッドの作成に関するLinuxカーネルのコード(2.6.11)を調査し、do_forkに続く() - alloc_pidmapは常にPIDを返すようです> alloc_pidmap()Linuxカーネルのデーモンプロセスにpid(プロセスID)がどのように割り当てられていますか?

> 300これまで、前のPIDの一回は、実際にデーモンのpidは常に< 300(これは正しいですか?)ですが、最大pidに達しました。

デーモンは、alloc_pidmap()以外の関数を使ってpidを取得しますか?もしそうなら、デーモンプロセスがdo_forkを使って作成されていないことを意味するのでしょうか?

+0

2.6.11は非常に古いカーネルです。現在は3.1!そして、なぜあなたは尋ねますか? –

+0

私はプロセス作成の手順について知りたいです。古いバージョンはそれほど重要ではありません。私はデーモンプロセスが非常に遅れて作成されているかどうか疑問に思っています。カーネルはpid <300を取得することをどのように保証しますか?あるいは、デーモンのPID <300が間違っていると思いますか? – Infinite

+1

alloc_pidmapのコードは、[link](http://lxr.linux.no/linux-bk+v2.6.11/kernel/pid.c#L35) – Infinite

答えて

2

AFAIK pidはカーネルによって割り当てられます。ほとんどのシステムでは、いくつかのプロセスがブートストラップの早いほうにフォークされている可能性があります(おそらくinitrdなど)。これはおそらく300の制限(#define RESERVED_PIDS 300私的内部kernel/pid.c)です。あなたはinit=/bin/sh

いくつかのプロセスとカーネルに直接GRUBからブートしてテストすることができ

は、initまたは子孫からフォークによって開始されていない(ユーザランドのコードなしで、例えばkworkerまたはkauditd)カーネルプロセス、です。おそらくkthread_createの中でのカーネル(そしてシステムコールは一切ありません)で始まっています。

あなたはなぜそれを求めているのか説明する必要があります。プロセスがデアモンであるかどうかを判断することについてあなたの質問ですか?

関連する問題