Wenn ich den folgenden Code ausführenwarum vfork() geben Segmentierungsfehler
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = vfork();
printf("hello world\n");
}
Output:
hello world
hello world
hello world
Segmentation fault
Ich weiß, dass es sei denn, exec() oder _exit() aufgerufen wird dann vfork() kann in seltsame Art und Weise verhalten, wenn wir versuchen, ändere irgendeine Variable, aber kann jemand bitte erklären, was genau passiert? Warum Hallo Welt wird 3 mal gedruckt? Liegt es daran, dass printf() gepuffert wird? und schließlich, warum ein Seg-Fehler gerade dann auftritt, wenn Eltern versuchen, zurückzukehren?
Wenn Sie wissen, dass es ein undefiniertes Verhalten auslöst, warum fragen Sie nach dem spezifischen Verhalten? –
das ist die Bedeutung von undefiniertem Verhalten, kann es nicht anders erklärt werden, würde es definiert werden –
"Verhalten auf seltsame Weise" ist keine gute Charakterisierung von "hat undefined Verhalten". Insbesondere liegt das Versagen bei einem Segfault innerhalb der weitgehend willkürlichen Grenzen eines undefinierten Verhaltens. Also drucke "Hallo Welt" dreimal, unabhängig davon, ob es irgendeinen Code in deinem Programm gibt, der irgendetwas über diese Ausgabe erklären könnte. Sie können nicht berechtigterweise über undefiniertes Verhalten argumentieren. –