8

ユーザー空間で呼び出されるsyscallを実装しています。たとえば、fooによって呼び出されます。syscall は foo の task_struct にアクセスし (グローバル ポインター current を介して)、その名前と pid を出力し、次に foo の親プロセス、foo の親の親などに進みます。init プロセスまでのすべての名前と pid を出力します。

pid=1 は init 用に予約されており、pid=0 は swapper 用に予約されています。

swapper の task_struct によると、その親プロセスはそれ自体です。

Swapper (または sched) は常に pid=0 であり、常に init の親プロセスですか?

すべての pid は非負ですか? 私がその仮定を立てても大丈夫ですか?

4

3 に答える 3

6

質問に簡潔に答えるには:

  • IBM のInside the Linux ブート プロセスでは、swapper プロセスは PID 値が 0 のプロセスであると説明されています。起動時に、このプロセス/sbin/init(またはブートローダーによってパラメーターとして指定された別のプロセス) が実行され、通常は PID 1 のプロセスになります。
  • Unix システムでは、PID 値は、最初のプロセスから で指定された最大値まで、順番/proc/sys/kernel/pid_maxに割り当てられます。したがって、すべての有効な PID が正の値を持ち、負の値はエラー値などに帰着するという仮定を安全に行うことができます。
  • ゾンビプロセスは、init によって採用された場合にプロセスツリーで「特別な扱い」を受けることができるため、ゾンビプロセスも考慮に入れることをお勧めします。
于 2012-04-04T20:51:36.313 に答える
2

常に正または0です。カーネルソースはpid_t、afaikが符号なしと見なされるタイプであると定義します(ただしfork、エラーの場合に負の数を返すなどの呼び出しを行うことができるように、符号付きとして定義されます)。 。

于 2012-03-06T13:06:45.040 に答える
2

はい、実際には常にポジティブです。

これは、負の値を使用して独自のすべての子プロセスなどを表し、正の値のみが有効な PID を表す、wait などのいくつかの POSIX システム コールによって確認できます。

例: http://linux.die.net/man/2/wait

于 2012-03-06T15:17:00.677 に答える