2017-03-05 4 views
0

ここではコードである:なぜntimesは子プロセスに1を追加しませんか?

#include <signal.h> 
#include <stdlib.h> 
#include <stdio.h> 

int ntimes = 0; 

int main() 
{ 
    int pid,ppid; 
    int p_action(),c_action(); 

    /* set parent process SIGUSR1 */ 
    signal(SIGUSR1,p_action); 

    switch(pid=fork()){ 
    case -1: /* fork failed */ 
    perror("synchro"); 
    exit(1); 
    case 0: /* child process mode */ 
    /* set child process SIGUSR1 */ 
    signal(SIGUSR1,c_action); 

    /* get parent process */ 
    ppid = getppid(); 

    for(;;){ 
     sleep(1); 
     kill(ppid,SIGUSR1); 
     pause(); 
    } 

    /* dead loop */ 
    break; 

    default: /* parent process mode */ 
    for(;;){ 
     pause(); 
     sleep(1); 
     kill(pid,SIGUSR1); 
    } 
    /* dead loop*/ 
    } 

    return 0; 
} 

p_action() 
{ 
    printf("Parent caught signal #%d\n",++ntimes); 
} 

c_action() 
{ 
    printf("Child caught signal #%d\n",++ntimes); 
} 

出力がある:

親キャッチ信号#1 子供キャッチ信号#1 親キャッチ信号#2 子供がキャッチ信号#2 親キャッチ信号#3 チャイルド信号#3 が検出されました。 。 。

なぜ子供のためにntimesが

ありがとう...親-1、子供-2、親-3、子供-4、のように、++ 1親に同じではないです!

+0

ここに示すコードはループを使用しないため、出力は他のソースによって作成されています。 – alk

答えて

0

親子(doren)do は同じ変数セットを共有します。

親の変数は、作成時に子に「コピー」されます。これは、子が独自の変数を単独で使用するよりも、親がその変数で行うことと同じです。

+0

ありがとう!それは私には意味がある –

関連する問題