execvp找不到程序时返回错误

时间:2016-09-27 00:54:13

标签: c linux unix fork exec

int spawn( char* program, char** args) {

pid_t child_pid;
child_pid = fork(); 

if( child_pid > 0) {  /
        wait(NULL);
        return (int)child_pid;
}

else {
    if(execvp(program, args) == -1){
        exit(EXIT_FAILURE); 
    }
    return (int)child_pid; 
    }
}

我知道这段代码有点乱,但请耐心等待:我试图创建自己的shell。这个函数将启动一个新的子进程并执行代码。但是,当我输入一个字符串时,我无法返回错误。

例如,如果我输入' heyman'我只是得到了#heyman'回来的时候,我想要回到某种程度的错误(' heyman'不是命令)。

我希望退出(EXIT_FAILURE)会这样做,但事实并非如此。如果有人能帮助我,我将不胜感激

1 个答案:

答案 0 :(得分:3)

使用perror()报告错误。

if (execvp(program, args) == -1) {
    perror("execvp");
    exit(EXIT_FAILURE);
}

不需要在子函数中使用return (int)child_pid。如果execvp()成功,则运行后没有代码;如果失败,则报告错误并退出。