Как получить 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()