如何在fork()中获取execvp的错误?
我有以下代码 我的问题在密码里如何在fork()中获取execvp的错误?,c,fork,execvp,C,Fork,Execvp,我有以下代码 我的问题在密码里 int main() { .... if ((uproc.pid = fork()) == -1) { return -1; } if (uproc.pid == 0) { /* child */ const char *argv[3]; int i = 0;
int main() {
....
if ((uproc.pid = fork()) == -1) {
return -1;
}
if (uproc.pid == 0) {
/* child */
const char *argv[3];
int i = 0;
argv[i++] = "/bin/sh";
argv[i++] = "/my/script.sh";
argv[i++] = NULL;
execvp(argv[0], (char **) argv);
exit(ESRCH);
} else if (uproc.pid < 0)
return -1;
/* parent */
int status;
while (wait(&status) != uproc.pid) {
DD(DEBUG,"waiting for child to exit");
}
// If /my/script.sh exit accidentally in some place with error.
// can I catch this error right here?
......
}
intmain(){
....
如果((uproc.pid=fork())==-1){
返回-1;
}
如果(upoc.pid==0){
/*孩子*/
常量字符*argv[3];
int i=0;
argv[i++]=“/bin/sh”;
argv[i++]=“/my/script.sh”;
argv[i++]=NULL;
execvp(argv[0],(char**)argv);
退出(ESRCH);
}否则如果(uproc.pid<0)
返回-1;
/*母公司*/
智力状态;
while(等待(&status)!=uproc.pid){
DD(调试,“等待子项退出”);
}
//如果/my/script.sh在某个地方意外退出并出现错误。
//我能在这里发现这个错误吗?
......
}
孩子的退出状态由等待
函数在状态
变量中提供
您可以使用WEXITSTATUS
宏获取退出状态,但仅当程序正常退出时(即调用exit
或从其main
函数返回):
有关更多信息,请阅读。子项的退出状态由等待
函数在状态
变量中提供
您可以使用WEXITSTATUS
宏获取退出状态,但仅当程序正常退出时(即调用exit
或从其main
函数返回):
阅读获取更多信息。您通过等待
函数进入,它位于状态变量中。它可能是对我的问题的响应状态始终为0。如果您通过wait
函数输入的脚本中没有错误,则它位于status
变量中。它可能是对我的问题的响应状态始终为0。如果没有错误,如果OP的脚本中有错误,则不清楚(“…执行cmd的错误…”)是否确实是所需的退出代码。无论如何,1 +,因为这是所有人可以得到的。我的脚本退出中间的消息错误,因为在中间有一个错误。状态返回始终为0(在cas中,脚本中有错误,而在cas中没有),因此为什么不更改此设置,并让脚本仅在成功的情况下使用exit 0
,并且在任何错误调用exit
时使用与0
不同的参数@MohamedKALLELTo要使脚本在由脚本启动的进程异常终止时做出反应,您可以使用陷阱
。在这里可以找到一篇关于使脚本更加健壮的有趣文章:@MohamedKALLELFrom the OP不清楚(“…执行cmd的错误…”)它是否真的是想要的退出代码。无论如何,1 +,因为这是所有人可以得到的。我的脚本退出中间的消息错误,因为在中间有一个错误。状态返回始终为0(在cas中,脚本中有错误,而在cas中没有),因此为什么不更改此设置,并让脚本仅在成功的情况下使用exit 0
,并且在任何错误调用exit
时使用与0
不同的参数@MohamedKALLELTo要使脚本在由脚本启动的进程异常终止时做出反应,您可以使用陷阱
。在这里可以找到一篇关于让脚本更加健壮的有趣文章:@MohamedKALLEL
if (WIFEXITED(status))
printf("Child exit status: %d\n", WEXITSTATUS(status));
else
printf("Child exited abnormally\n");