我需要检索由exec()或system()启动的进程的PID,我读过这方面的文章并做过研究,但我不理解使用fork()来实现这一目的的建议。
假设我有以下代码:
int pid = fork();
if (pid < 0 ) {
exit(1);
} else if (pid == 0 ) {
execlp("ls", "-a", NULL);
} else {
wait(0)
}
如何获取由execlp启动的进程的pid(如果使用system,则通过system())?我不需要终止该进程,我只需要pid来检索有关它的统计信息。
1条答案
按热度按时间cvxl0en21#
exec*
家族的函数不会创建新进程,而是将调用它们的进程的执行上下文替换为目标可执行文件的执行上下文。另一方面,
fork
* 创建 * 新的子进程,该子进程当然具有其自己的PID,该子进程继续执行从其产生的相同执行上下文的副本;一旦fork
被调用,您可以认为执行被“分割”。fork
在子进程中返回0
,在父进程(我们的原始进程)中返回子进程的PID。其思想是先使用
fork
,然后使用exec*
替换子进程的执行上下文。system
是fork
、exec*
和waitpid
的 Package 器,它阻塞调用进程,直到子进程完成其执行。不报告子进程的PID,因为到父进程可以再次“操作”时,子进程的PID已无意义。fork
、exec*
和wait*
函数的错误。*