2016-10-25 6 views
-3
#include <sys/types.h> 
#include <stdio.h> 
#include <unistd.h> 

int value = 5; 
int main() 
{ 
    pid t pid; 
    pid = fork(); 
    if (pid == 0) { 
    value += 15; 
    return 0;} 
    else if (pid > 0) { /* parent process */ 
     wait(NULL); 
    printf("PARENT: value = %d",value); /* LINE A */ 
       return 0;}} 

作成される子プロセスの数と、行Aに印刷される値はいくつですか?次のコードで作成される子プロセスの数

+3

あなたは単にそれを試してみることを止めますか? – Ari0nhh

+0

ピコスタイルは実際にはCコードの受け入れられた(受け入れ可能な)レイアウトではありません。説得力のある理由がない限り、[Allman or 1TSB](https://en.wikipedia.org/wiki/Indent_style)のいずれかを選択してください。その理由が説得力のある理由を説明する準備ができているはずです。控えめなインデントが示されていると、あなたはピコスタイルに非常に近づいていません。 –

+0

親プロセスが5を印刷します。プロセスは1つだけ作成されます。 –

答えて

1

試しましたか?

親プロセスで変更されていないので、1つの子プロセスが作成され、親プロセスは値5を出力します。グローバル変数には、各プロセスにコピーがあり、共有されません。

+0

はい、実際に私はちょうどCの学習を始めました。私は子プロセスと親プロセスについてちょっと混乱しています。 – Alex

+0

"単一の子が作成され、5"が印刷されます。間違っています:子は何も印刷しません。 "親プロセスで変更されていないので"親/子プロセスは希望通りに値を変更できますが、 'value'は重複するグローバル変数であるため、他のプロセスには影響しませんフォークで。すべてのプロセスには独自の価値があります。 –

+1

@TonyTannous:正しいコメント、トニー、私はそれが私の元の文章から混乱している可能性があることを認めます。私はその文章を改正した。 –

関連する問題