Как получить детский PID в C? - PullRequest
       45

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

15 голосов
/ 05 февраля 2012

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

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

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

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

Ответы [ 5 ]

30 голосов
/ 05 февраля 2012

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

посмотрите на man 2 fork:

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ

 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.
4 голосов
/ 04 марта 2017

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

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

2 голосов
/ 28 марта 2018

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

int main()
{
int id;

id= fork();

if(id==0)
{
printf("I am child process my ID is   =  %d\n" , getpid());
}
}
1 голос
/ 08 марта 2018

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

pid = fork()

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

0 голосов
/ 23 августа 2014

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

...