Когда я запускаю следующий кодпочему vfork() дает ошибку сегментации
#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
Я знаю, что если Exec() или _exit() вызывается тогда vfork() может вести себя странным образом, если мы попытаемся изменить любую переменную, но кто-то может объяснить, что именно происходит? почему мир приветствия печатается 3 раза? Это потому, что printf() получает буферизацию? и, наконец, почему ошибка seg происходит именно тогда, когда родитель пытается вернуться?
Если вы знаете, что он вызывает неопределенное поведение, почему вы спрашиваете о конкретном поведении? –
, что является значением неопределенного поведения, его нельзя объяснить иначе, он будет определен –
«Вести странно» не является хорошей характеристикой «имеет неопределенное поведение». В частности, неудача с segfault хорошо лежит в пределах практически произвольных границ неопределенного поведения. Так что печатайте «мир привет» три раза, независимо от того, есть ли в вашей программе какой-либо код, который мог бы объяснить что-либо о таком выходе. Вы не можете законно рассуждать о неопределенном поведении. –