执行 |尝试使用 execlp 运行 frok 但他在 execlp 之后的所有命令都没有 运行ing

execlp | try to run frok with execlp but all he the command after execlp not runing

我试图了解谁在使用 fork 和 execlp,但遇到了意外行为。 我想我错过了什么。 正如我在子进程中的代码中看到的那样,printf 命令不只执行 execlp 然后执行父进程,为什么会这样? 我的预期印刷品是: pid.c 5个 10

但我得到了: pid.c 10

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/wait.h> 
#include<unistd.h> 

int value = 10;
int main()
{
 pid_t pid;
 pid = fork();
 if (pid == 0) {
  value -= 5;
  execlp("/bin/cat","cat","pid.c",NULL);
  printf("%d\n",value);
  return 0;
}
else if (pid > 0) {
  wait(NULL);
  printf("%d\n",value);
  return 0;
   }
 }

在成功调用 exec*() 之后,过程映像被替换,并且不执行此调用之后的代码。所以

printf("%d\n",value);

第一个条件分支永远不会在成功时执行。

您将不得不再次 fork() 仅用于 execlp()-调用:

value -= 5;
if (fork() == 0) {
    execlp("/bin/cat","cat","pid.c",NULL);
    exit(1);
}
wait(NULL);
printf("%d\n",value);

顺便说一句。 execlp() 并不意味着与可执行文件的绝对路径一起使用,这就是 execl() 的用途。