fork和execlp

时间:2011-10-02 06:38:49

标签: linux fork

当我使用fork创建一个新的子进程然后调用execlp syscall来在子进程中运行一个新程序时。我在execlp之后进入子进程的进程ID以及在子进程终止后从waitpid系统调用获得的进程ID是不同的。

例如,getpid()在子节点中返回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();

1 个答案:

答案 0 :(得分:4)

您正在执行xterm,而不是echo_cli。您孩子的孩子当然会报告不同的PID。