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;
}
}
Ä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
@Pablo Danke, das funktioniert für mich, könnten Sie eine Antwort hinzufügen und ich werde dieses Problem schließen. – laoqiren