执行 |尝试使用 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()
的用途。
我试图了解谁在使用 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()
的用途。