2012-03-06 20 views
6

私はユーザ空間で呼び出されるシステムコールを実装しています。 syscallはfooのtask_struct(グローバルポインタの現在)をアクセスし、その名前とpidを出力し、fooの親プロセス、fooの親の親プロセスなどに進みます。すべての名前とpidをinitプロセスのものまで出力します。LinuxではプロセスIDは負ではありませんか?

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

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

スワッパ(またはsched)は常にpid = 0を持ち、常にinitの親プロセスですか?

すべてのpidsは負ではありませんか?私はその仮定を立てても大丈夫ですか?

答えて

1

カーネルソースでは、pid_t型のafaikが符号なしと見なされます(ただし、forkなどの呼び出しを行うことができるように署名されていると定義されています)エラーの場合の番号)。

+0

おかげで私はpid_tが定義されているかすぐにチェックします。 – Plazo

+1

私はそれが署名されていると思います、 'fork'は' pid_t'を返します。これは '-1'でもかまいません。また、私はいくつかのヘッダーでそれを見て覚えていると思います。確認する必要があります。 Ofcは、プロセスIDが負の値になることを意味するものではありません。 –

+0

署名されているだけです。しかし、エラーを返すためにはそうです:D –

0

はい、実際は常に正です。

有効なPIDのを表すように、あなた自身のすべての子プロセス等、及び正の値のみなど、物事を表現するために負の値を使用して、このような待ち時間など、いくつかのPOSIXシステムコール、により、これを確認することができます。

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

4

より簡潔にご質問にお答えするには、次のプロセスは、このプロセスは、/sbin/init(または他のプロセスを実行します起動時に0のPID値を持つものとして

  • IBMのInside the Linux boot processはスワッパープロセスについて説明ブートローダによってパラメータとして与えられます)。通常、PID 1のプロセスになります。
  • Unixシステムでは、PID値は最初のプロセスから最大値指定までsequentiallyに割り当てられます/proc/sys/kernel/pid_maxによってied。したがって、すべての有効なPIDが正の値を持ち、負の値がエラー値などになるという前提の下で安全に実行できます。
  • zombieプロセスについても良いアイデアがあります。initによって採用されている場合、プロセスツリーで「特別扱い」を受け取ることができるからです。
関連する問題