excel 正在成功 - 但是正在调用 exit(1)
execl is suceeding - however exit(1) is being called
我试图更好地理解 exec() - 所以我在 testing.c
中有以下脚本
#include <stdio.h>
#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
if(argc < 2) {
fprintf(stderr,"Error:: Expecting an Argument!\n");
exit(-1);
}
pid_t pid;
pid = fork();
if (pid==0) {
execlp("./testing","testing",NULL);
fprintf(stderr, "I want to get to here...\n");
exit(-1);
}
wait(NULL);
printf("Parent and child done\n");
return 0;
}
下面的块是我用./testing one
:
执行后的输出
Error:: Expecting an Argument!
Parent and child done
在阅读 exec()
的工作原理时,我希望在我的 execlp
调用后能够 fprintf
,因为它应该返回 -1,我想知道我是否需要设置 errno 之类的东西,或者更明确地抛出一些东西,以便 execlp
重新识别错误?
输出:
Error:: Expecting an Argument!
Parent and child done
来自
(first line) child process tries to run but no command line parameter.
(second line) parent process finishes
如果 execlp
函数成功启动了给定的程序,它 而不是 return。当前程序映像将替换为新程序的程序映像。因此,即使新程序以状态 -1 退出,它仍然不会返回到调用 execlp
.
的程序
如果你想得到子进程的退出状态,传递一个int
的地址给wait
然后读取:
int main(int argc, char ** argv)
{
if(argc < 2) {
fprintf(stderr,"Error:: Expecting an Argument!\n");
exit(-1);
}
pid_t pid;
pid = fork();
if (pid == -1 {
perror("fork failed");
exit(-1);
} else if (pid == 0) {
execlp("./testing","testing",NULL);
perror("execlp failed");
exit(-1);
}
int status;
wait(&status);
printf("child exit status: %d\n", WEXITSTATUS(status));
printf("Parent and child done\n");
return 0;
}
我试图更好地理解 exec() - 所以我在 testing.c
#include <stdio.h>
#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
if(argc < 2) {
fprintf(stderr,"Error:: Expecting an Argument!\n");
exit(-1);
}
pid_t pid;
pid = fork();
if (pid==0) {
execlp("./testing","testing",NULL);
fprintf(stderr, "I want to get to here...\n");
exit(-1);
}
wait(NULL);
printf("Parent and child done\n");
return 0;
}
下面的块是我用./testing one
:
Error:: Expecting an Argument!
Parent and child done
在阅读 exec()
的工作原理时,我希望在我的 execlp
调用后能够 fprintf
,因为它应该返回 -1,我想知道我是否需要设置 errno 之类的东西,或者更明确地抛出一些东西,以便 execlp
重新识别错误?
输出:
Error:: Expecting an Argument!
Parent and child done
来自
(first line) child process tries to run but no command line parameter.
(second line) parent process finishes
如果 execlp
函数成功启动了给定的程序,它 而不是 return。当前程序映像将替换为新程序的程序映像。因此,即使新程序以状态 -1 退出,它仍然不会返回到调用 execlp
.
如果你想得到子进程的退出状态,传递一个int
的地址给wait
然后读取:
int main(int argc, char ** argv)
{
if(argc < 2) {
fprintf(stderr,"Error:: Expecting an Argument!\n");
exit(-1);
}
pid_t pid;
pid = fork();
if (pid == -1 {
perror("fork failed");
exit(-1);
} else if (pid == 0) {
execlp("./testing","testing",NULL);
perror("execlp failed");
exit(-1);
}
int status;
wait(&status);
printf("child exit status: %d\n", WEXITSTATUS(status));
printf("Parent and child done\n");
return 0;
}