Как получить child PID в C?

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

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

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

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

5 ответов


fork уже возвращает PID ребенка. Просто сохраните возвращаемое значение.

посмотрите на вилку man 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.

Как упоминалось в предыдущем ответе, что " 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 */
} 

этой ссылке очень полезно и подробно объясняет.


Если вы вызываете fork следующим образом:

pid = fork()

тогда pid фактически является вашим дочерним PID. Так что вы можете распечатать его с родителем.


если fork() успешно создан, он возвращает значение 0 в дочернем процессе.

int main()
{
int id;

id= fork();

if(id==0)
{
printf("I am child process my ID is   =  %d\n" , getpid());
}
}

есть две основные функции для получения идентификатора процесса родительского процесса и дочернего. getpid() и getppid()