当我使用fork创建一个新的子进程,然后调用execlp syscall在子进程中运行一个新程序。在execlp之后,我在子进程中获得的进程ID和子进程终止后从waitpid系统调用中获得的进程id不同。fork和execlp
例如,getpid()在child中返回7103,waitpid返回7101在父级中。
我猜execlp运行后会发生什么事情。任何人都可以解释一下谢谢。
顺便说一句,我在Fedora上运行我的代码。
下面是代码:
/*程序母公司*/
if ((pid = fork()) < 0){
perror("fork failed");
exit(2);
}
if (pid == 0){
// child
execlp("xterm", "xterm", "-e", "./echo_cli", "127.0.0.1", (char *)0);
exit(0);
}
/* ... */
// sig_chld handles SIGCHLD singal
void sig_chld(int signo){
pid_t pid;
int stat;
while ((pid = waitpid(-1, &stat, WNOHANG)) > 0){
printf("Child %d terminated\n", pid);
}
return ;
}
/*程序echo_cli */
pid = getpid();
不知道你在做什么。 –
帖子相关代码 – jman
echo_cli中的pid和waitpid返回的pid不同 – Rambo