Начните с чтения справочной страницы , а также getppid / getpid справочных страниц.
Из вилки
В случае успеха PID дочернего процесса возвращается в родительский
поток выполнения, и 0 возвращается в дочернем потоке
выполнение. В случае неудачи -1 будет возвращено в контексте родителя,
дочерний процесс не будет создан, и errno будет установлен соответствующим образом.
Так что это должно быть что-то вроде
if ((pid=fork())==0){
printf("yada yada %u and yada yada %u",getpid(),getppid());
}
else{ /* avoids error checking*/
printf("Dont yada yada me, im your parent with pid %u ", getpid());
}
По вашему вопросу:
Это дочерний процесс. Мой pid - 22163, а идентификатор моего родителя - 0.
Это дочерний процесс. Мой PID 22162 и идентификатор моего родителя
22163.
fork()
выполняется до printf
. Таким образом, когда это будет сделано, у вас будет два процесса с одинаковыми инструкциями для выполнения. Следовательно, printf будет выполняться дважды. Вызов fork()
вернет 0
дочернему процессу, а pid
дочернего процесса - родительскому процессу.
Вы получаете два запущенных процесса, каждый из которых выполнит эту инструкцию :
printf ("... My pid is %d and my parent's id is %d",getpid(),0);
и
printf ("... My pid is %d and my parent's id is %d",getpid(),22163);
~
Чтобы обернуть это, вышеприведенная строка - это дочерний элемент, определяющий его pid
. Вторая строка - это родительский процесс, указывающий его идентификатор (22162) и его дочерний (22163).