2017-03-05 1 views
0

Hier ist der Code:Warum fügt die ntimes keinen in Child-Prozess hinzu?

#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); 
} 

Und der Ausgang ist:

Eltern gefangen Signal # 1 Kind gefangen Signal # 1 Eltern gefangen Signal # 2 Kind gefangen Signal # 2 Eltern gefangen Signal # 3 Kind gefangen Signal # 3 . . .

Warum die nTimes für Kind gleich der Eltern ist aber nicht ++ 1, wie Eltern-1, Kind-2, Eltern-3, Kind-4, ...

Thank you!

+0

BTW, der Code wie gezeigt verwendet keine Schleife, so dass die Ausgabe, die Sie geben, von einer anderen Quelle erstellt wurde. – alk

Antwort

0

Eltern und Kind (dren) tun nicht teilen sich die gleiche Menge von Variablen.

Die Variablen des Elternteils werden bei der Erstellung in child "kopiert", von da an verwendet das Kind unabhängig seine eigenen Variablen, dasselbe wie das Elternelement mit seinen Variablen.

+0

Danke! Das macht Sinn für mich –

Verwandte Themen