2016-03-20 23 views
1

I in C-System-Programmierung bin neuProgramm, das PID wechselt alle n Sekunden

Hier Ich versuche, ein Programm zu schreiben, das sein PID wechselt alle (n = 2) Sekunden. Aber beim Kompilieren bekomme ich jedes Mal die gleiche PID. Die PID ändert sich nie. Hat jemand eine Idee, bitte?

Hier ist mein Code:

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

int main(){ 

printf("Programme qui change de PID toutes les deux secondes \n"); 
pid_t fils; 

while(1){ 
    printf("I'm %d\n",(int)getpid()); 
    sleep(5); 
    fils = fork(); 
    if(fils < 0){ 
     perror("Fork child \n"); 
     exit(1); 
    } 
    else if (fils ==0) 
     exit(0); 

} 
return 0; 
} 
+0

Versuchen 'else if (fils == 0)' auf 'anderes zu ändern, wenn (fils> 0) '. Der Code, der angezeigt wird, verlässt den untergeordneten Prozess und lässt den gleichen/ersten übergeordneten Prozess ausgeführt. Da es sich um denselben Prozess handelt, bleibt sein Pid natürlich gleich. – kaylum

+0

@ Kaylum, es funktioniert! Danke :) –

+0

Minor nit pick: Der kanonische Weg, um eine nicht endende Schleife in C auszudrücken, ist 'for (;;)', da es den konstanten Wert boolean in der 'while (1) 'Bedingung vermeidet (einige Flüche beschweren sich) es). Und es ist kürzer zu tippen! – Jens

Antwort

3

der Grund, die PID nicht ändert, weil ein Prozess ändert sich nie pid. und der Code befindet sich immer im übergeordneten Prozess, wenn der Wert der PID überprüft wird.

Nun erhält jeder untergeordnete Prozess seine eigene PID. Sie könnten veranlassen, dass das Kind seine PID vor dem Beenden erhält/anzeigt.

+0

Vielen Dank für Ihre Antwort :) –

1

Diese

else if (fils ==0){ 
    //<- here 
    //printf("my pid is %d\n", getpid()); 
      exit(0); 
} 

ist der Umfang des neuen Prozesses Sie aus gegabelt haben.

Sie können sich diesen Bereich als main vorstellen und es ist dieser Bereich, der in einem anderen Prozess mit seiner eigenen pid ausgeführt wird.

(Sie wollen wahrscheinlich _exit eher dann exit es Doppelspülung von stdio Puffer Preven. (Das Kind Prozess eine Kopie) bekommt)

+0

Vielen Dank für Ihre Antwort :) –

Verwandte Themen