如何在C中获得子PID?

时间:2012-02-05 07:45:45

标签: c fork pid

我正在for - 循环中创建子进程。在子进程内部,我可以使用getpid()检索子PID。

但是,出于某种原因,当我尝试将getpid()的值存储到父进程声明的变量中时,当我在父进程中检查它时,更改无效。我假设这与某种过程变量范围有关。不太熟悉C,所以不能太确定。

无论如何,将子PID的getpid()结果(从子进程调用时)存储到父进程的变量中的方法是什么?

或许另一种方法是将fork()存储到父项中的变量中并调用该变量上的某个函数来检索子项的PID?我不知道怎么做,所以如果这是更好的方法,你会怎么做?

5 个答案:

答案 0 :(得分:30)

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.

答案 1 :(得分:4)

如前面的回答所述,“fork()向子进程返回值0,并将子进程的进程ID返回给父进程。”所以,代码可以用这种方式编写:

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 */
} 

link非常有用并详细说明。

答案 2 :(得分:2)

如果fork()成功创建,则它在子进程中返回0值。

int main()
{
int id;

id= fork();

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

答案 3 :(得分:1)

如果您通过以下方式调用fork:

pid = fork()

然后pid实际上是你的孩子PID。所以你可以从父母那里打印出来。

答案 4 :(得分:-5)

获取父进程和子进程的进程ID有两个主要功能。 getpid()和getppid()