我正在编写一个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);
}
}
答案 0 :(得分:0)
您错过了fork
的返回值。那个是孩子的pid!
您当前正在父级中打印getpid
,但这当然会打印父级pid。