2012-02-05 5 views
11

私は子プロセスをfor -loopに作成しています。子プロセスの中で、私は子PIDをgetpid()で取り出すことができます。Cで子PIDを取得するには?

ただし、親プロセスによって宣言された変数にgetpid()の値を格納しようとすると何らかの理由で親プロセスでチェックすると変更が無効になります。私はこれが何らかのプロセス変数スコープと関係していると仮定しています。 Cに慣れていないので、あまり確かではありません。

子プロセス(子プロセスから呼び出されたとき)のgetpid()の結果を親プロセスの変数に格納する方法は何ですか?

また別のアプローチでは、fork()を親の変数に格納し、その変数の一部の関数を呼び出して子のPIDを取得していますか?私はこれを行う方法も知らないので、もしこれがより良い方法なら、どうやってこれをやるでしょうか?

+0

私は気分がいい/馬鹿のように、速い返事のためにthx !!!! – Derek

+0

@Johnsywebこれは明らかに2つの文章です。 '/と子プロセス内部/。これらの子プロセスの中で/ '。 – glglgl

+0

@glglgl:Aha。私はアホです。 – Johnsyweb

答えて

24

forkはすでに子のpidを返します。戻り値を保存するだけです。

男2フォークを見て:

RETURNは、親プロセスと子プロセスのプロセスIDを取得するための2つの主要な機能があります

Upon successful completion, fork() returns a value of 0 to the child process and 
returns the process ID of the child process to the parent process. Otherwise, a 
value of -1 is returned to the parent process, no child process is created, and 
the global variable errno is set to indicate the error. 
-4

値。

+2

-1 'getpid()'は呼び出したプロセスのPIDを返すが、その子(ren)は返さない。 – Celeritas

1

"fork()は子プロセスに0の値を返し、子プロセスのプロセスIDを親プロセスに返します。"だから、コードはこのように書くことができます。

pid = fork(); /* call fork() from parent process*/ 
if (0 == pid) 
{ 
    /* fork returned 0. This part will be executed by child process*/ 
    /* getpid() will give child process id here */ 
} 
else 
{ 
    /* fork returned child pid which is non zero. This part will be executed by parent process*/ 
    /* getpid() will give parent process id here */ 
} 

このlinkは非常に有用であり、詳細に説明しています。

0

あなたは次のようにフォークを呼び出す場合:

pid = fork() 

その後pidは実際にあなたの子供PIDです。親からそれを印刷することができます。

関連する問題