2017-12-29 11 views
-1

Ich verwende fork(), um einen untergeordneten Prozess zum Ausführen von Code zu starten, aber ich habe festgestellt, dass im unterprozess einige Code wie printf("child is running"); nicht ausgeführt wird, und Wenn ich die Sätze in switch() entferne, wird es richtig laufen, ich kann nicht verstehen, warum das passieren wird.Ein Teil des Codes in den untergeordneten Prozess von fork() wird übersprungen

pid_t pid = fork(); 
if(pid == 0){ 
     int execl_status = -1; 
     printf("child is running"); // this will not run 

     switch(cmdIndex) 
     { 
      case CMD_1: 
       execl_status = execl("./cmd1","cmd1",NULL); 
       break; 
      case CMD_2: 
       execl_status = execl("./cmd2","cmd2",NULL); 
       break; 
      case CMD_3: 
       execl_status = execl("./cmd3","cmd3",NULL); 
       break; 
      default: 
       printf("Invalid Command\n"); 
       break; 
     } 
} 
+2

Ändern Sie die 'printf' Zeile in' printf ("untergeordnete Datei läuft \ n"); '. Ohne das '\ n'' printf' wird 'stdout' nicht sofort gelöscht und es scheint so, als ob es nicht ausgeführt wurde. Sonst kann ich keinen anderen Grund sehen, warum die Kinderprozedur nicht läuft. Haben Sie auch überprüft, dass 'fork()' '-1' nicht zurückgegeben hat? – Pablo

+0

@Pablo Danke, das funktioniert für mich, könnten Sie eine Antwort hinzufügen und ich werde dieses Problem schließen. – laoqiren

Antwort

1

Wie ich im Kommentar sagte, ändern Sie Ihre printf Linie

printf("child is running\n"); 

Wenn Sie nicht \n am Ende des Formatstrings nicht verwenden, printf in der Regel nicht bündig nicht stdout sofort und so scheint es, als ob nichts ausgeführt wurde.

Wenn Sie nicht das Newline drucken möchten (aus irgendeinem Grund), könnten Sie auch bündig stdout selbst:

printf("child is running"); 
fflush(stdout); 

Ich sehe keinen anderen Grund, warum es scheint nicht zu laufen. Vergessen Sie auch nicht zu überprüfen, ob fork()-1 zurückgibt, vielleicht hat Ihr Benutzerkonto die Grenze der verzweigten Prozesse erreicht.

Verwandte Themen