Учитывая приведенный ниже код:возвращаемое значение в vfork системы() вызова
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
В случае vfork() адресса пространство, используемое родительского процесса и дочерний процесс такой же, поэтому одна копия переменной PID должен быть там. Теперь я не могу понять, как эта переменная pid может иметь два значения, возвращаемые vfork() i.e ноль для дочернего элемента и ноль для родителя?
В случае вилки() адресса пространство также копируется и есть две копий Pid переменных в каждом ребенке и родитель, так что я могу понять, в этом случае две разных копий могут иметь разные значения, возвращенную вилки(), но не может понять в случае vfork() Как pid имеет два значения, возвращаемые vfork()?
Это смертоносное - вы можете 'exec()' или '_exit()' в ['vfork()'] (http://pubs.opengroup.org/onlinepubs/009695399/toc.htm) 'd child , но это именно так. Практически все остальное приводит к неопределенному поведению. Рекомендация: не используйте ['vfork()'] (http://pubs.opengroup.org/onlinepubs/007908799/xsh/vfork.html); действительно, я даже не потрудился бы научиться пользоваться им безопасно. Это похоже на 'gets()', функция, которую лучше притворяться, не существует. –
@JonathanLeffler: 'vfork()' весьма полезен для систем без MMU. – ninjalj
Да, сэр, я согласен с u, мы не должны его использовать, но я использовал vfork для решения одной проблемы создания дерева процессов и обмена данными между процессами разных уровней дерева, в этом случае vfork был полезен при использовании некоторой глобальной переменной. Я буду держать совет ур. –