首页 文章

如何在C中获得子PID?

提问于
浏览
13

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

但是,出于某种原因,当我尝试将 getpid() 的值存储到父进程声明的变量中时,当我在父进程中检查它时,更改无效 . 我太确定了 .

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

或者也许另一种方法是将 fork() 存储到父变量中,并在该变量上调用一些函数来检索孩子's PID? I don'知道如何做到这一点,所以如果这是更好的方法,你会怎么做?

5 回答

  • -5

    fork 已经返回孩子的pid . 只需存储返回值 .

    看看男人2叉:

    返回值成功完成后,fork()向子进程返回值0
    将子进程的进程ID返回给父进程 . 否则,一个
    值-1返回到父进程,没有创建子进程,和
    全局变量errno设置为指示错误 .

  • 27

    正如前面的回答中提到的那样,“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非常有帮助,并详细解释 .

  • 4

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

    pid = fork()
    

    那么pid实际上就是你的孩子PID . 所以你可以从父母那里打印出来 .

  • 1

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

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

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

相关问题