将pid从孩子传回父母

时间:2018-02-15 13:53:50

标签: c++ linux

我正在编写一个C ++程序,允许在后台运行多个程序并同时处理它们。

假设打印一条背景程序已完成的消息。由于我不能在子进程中直接打印完成msg,所以我尝试在父进程中使用wait()进行打印,但它可以工作,但是我无法得到子PID,所以输出msg是错误的。

有没有办法让我得到孩子的pid并由父母打印?

if(cmdline=="bg"){//bg

  pid=fork();

  if (pid == 0){ // child process

    char * parmList[] = {"demo","running","2","3",NULL};
    execvp(parmList[0],parmList);
    exit (EXIT_FAILURE);

  }
  else if (pid > 0){// preant
        pidStack.push_back(pid);
        nameStack.push_back(argTemp[0]);
        wait(&status);
        cout << getpid() << " completed" << endl;

  }   


  else { // fork failed
    printf("fork () failed!\n");
    exit (EXIT_FAILURE);
  }
 }

1 个答案:

答案 0 :(得分:0)

您错过了fork的返回值。那个孩子的pid!

您当前正在父级中打印getpid,但这当然会打印父级pid。