Ich versuche, ein einfaches Beispiel mit der exec() und fork(). Aber ich habe ein kleines Problem und ich habe nicht verstanden, wie es funktioniert.Exec (CD und ls) und Fork Anruf C
Der Code hat 3 Forks und in jedem Kind ruft er eine Exec auf. Der erste Systemaufruf lautet "wer", nach "cd" und "ls -ls". Mein Problem ist: nachdem "cd" gemacht wurde, zeigt der "ls" Aufruf nicht die Dateien im aktuellen Verzeichnis an. Also, wenn ich 'dir1/dir2' habe, mache ich "cd", aber wenn ich "ls" mache, zeigt das Programm die Dateien in 'dir/dir2' an.
Es ist möglich, dass ein Kind auf die Änderungen eines anderen Kindes zugreift?
while (cont_arg < 3) {
pid_t pid = fork();
if (pid == -1) {
perror("fork failed");
exit(EXIT_FAILURE);
} else if (pid == 0) {
printf("\n---: child process ID -> %d.\n", getpid());
printf("command --- > %s\n", command[cont_arg]);
execlp(command[cont_arg], command[cont_arg], arg[cont_arg], NULL);
_exit(EXIT_SUCCESS);
} else {
wait(&status);
}
cont_arg++;
}
Vielen Dank! Ich habe das Chdir benutzt und es hat funktioniert. –
eine letzte Frage, wenn ich chdir verwende, werde ich das aktuelle Verzeichnis zu zukünftigen Kindern, die ich mit der Gabel oder nur das Verzeichnis des aktuellen Kind erstellen kann? –
@GabrielaCavalcante Ein über fork (2) erstellter Kindprozess erbt das aktuelle Arbeitsverzeichnis des übergeordneten Benutzers. Also, ja, alle Kinder werden das veränderte haben. – fluter