Как получить дочерний PID в C?
Я создаю дочерние процессы в for
-loop. Внутри дочернего процесса я могу получить дочерний PID с помощью getpid()
.
Однако по какой-то причине, когда я пытаюсь сохранить значение getpid()
в переменной, объявленной родительским процессом, изменение аннулируется, когда я проверяю его в родительском процессе. Я предполагаю, что это связано с каким-то видом переменной процесса. Не очень хорошо знаком с C, поэтому не может быть уверен.
Во всяком случае, каким образом можно сохранить результат getpid()
дочернего PID (при вызове из дочернего процесса) в переменную родительского процесса?
Или, может быть, другой подход заключается в хранении fork()
в переменной родителя и вызове некоторой функции этой переменной для извлечения дочернего PID? Я тоже не знаю, как это сделать, поэтому, если это лучший способ, как бы вы это сделали?
Ответы
Ответ 1
fork
уже возвращает дочерний pid. Просто сохраните возвращаемое значение.
смотреть на мужчину 2 вилка:
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Upon successful completion, fork() returns a value of 0 to the child process and
returns the process ID of the child process to the parent process. Otherwise, a
value of -1 is returned to the parent process, no child process is created, and
the global variable errno is set to indicate the error.
Ответ 2
Как упоминалось в предыдущем ответе, "fork() возвращает значение 0 дочернему процессу и возвращает идентификатор процесса дочернего процесса в родительский процесс". Таким образом, код может быть записан следующим образом:
pid = fork(); /* call fork() from parent process*/
if (0 == pid)
{
/* fork returned 0. This part will be executed by child process*/
/* getpid() will give child process id here */
}
else
{
/* fork returned child pid which is non zero. This part will be executed by parent process*/
/* getpid() will give parent process id here */
}
Эта ссылка очень полезна и подробно объясняется.
Ответ 3
Существуют две основные функции для получения идентификатора процесса родительского процесса и дочернего. getpid() и getppid()