Подтвердить что ты не робот

Как получить дочерний PID в C?

Я создаю дочерние процессы в for -loop. Внутри дочернего процесса я могу получить дочерний PID с помощью getpid().

Однако по какой-то причине, когда я пытаюсь сохранить значение getpid() в переменной, объявленной родительским процессом, изменение аннулируется, когда я проверяю его в родительском процессе. Я предполагаю, что это связано с каким-то видом переменной процесса. Не очень хорошо знаком с C, поэтому не может быть уверен.

Во всяком случае, каким образом можно сохранить результат getpid() дочернего PID (при вызове из дочернего процесса) в переменную родительского процесса?

Или, может быть, другой подход заключается в хранении fork() в переменной родителя и вызове некоторой функции этой переменной для извлечения дочернего PID? Я тоже не знаю, как это сделать, поэтому, если это лучший способ, как бы вы это сделали?

4b9b3361

Ответ 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()