gpt4 book ai didi

linux - fork 和 execlp

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:29 24 4
gpt4 key购买 nike

当我使用 fork 创建一个新的子进程,然后调用 execlp 系统调用在子进程中运行一个新程序时。我在 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();

最佳答案

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

关于linux - fork 和 execlp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com