Я пытаюсь работать с несколькими процессами в Linux с использованием fork()
функции в C, это мой код:родительского процесса Идентификатор дочернего процесса отличается от PID родительского
p1 = fork();
if(p1 != 0){
p2 = fork();
}
printf("My PID is %d\n",getpid());
printf("My parent PID is %d\n",getppid());
Теперь давайте предположим, что родительский процесс ID 100, и два дочерних процессов (p1, p2) идентификаторы 101 & 102, и процесс инициализации PID будет 0 мой ожидается выход:
My PID is 100
My parent PID is 0
My PID is 101
My parent PID is 100
My PID is 102
My parent PID is 100
Вместо я вижу что-то другое, два дочерних процессов имеют тот же PPID, но первый процесс ha с другой PID. Вот пример вывода я получил:
My PID is 3383
My parent PID is 3381
My PID is 3387
My parent PID is 1508
My PID is 3386
My parent PID is 1508
Мой вопрос, не должен родительский PID двух дочерних процессов будет ? Надеюсь, кто-то может объяснить, как все это работает и что я делаю (или думаю) неправильно.
Что происходит, если вы добавляете спящий режим после выполнения обоих 'printf'? –
@MohitJain это действительно исправлено, как это происходит? Я имею в виду сон. После того, как 'printf' ничего не изменит, поскольку процессы будут созданы, а' fork' - то же самое ... – argamanza