execvp()后命令行以空白提示结束

时间:2018-05-15 03:21:11

标签: c shell

几乎一切都像它应该的那样工作,除非它达到if(execvp .....)。 if语句可以正常工作,但不会返回命令行。如果/ bin / ls,它将打印所有内容,但是除光标外,下一行将为空白。如果它到达printf(...“未找到命令”......),则相同。我最好的猜测是父进程在孩子面前完成/终止,但是如果这是问题,我还没有找到补救措施。希望问题在于eval。 (这不是复制/粘贴,因此可能存在小错误)

void eval(char *cmdline)
{
    int bg;
    char *argv[MAXARGS];
    pid_t pid;
    sigset_t mask;
    ///
    bg = parseline(cmdline, argv);
    ///
    if (!builtin_cmd(argv)) {
        sigemptyset(&mask);
        sigaddset(&mask, SIGCHLD);
        sigaddset(&mask, SIGINT);
        sigaddset(&mask, SIGSTP);
        sigprocmask(SIG_BLOCK, &mask, NULL);
        ///
        if ((pid = fork()) < 0) {
            unix_error("...");
        }
        else if (pid == 0) {
            sigprocmask(SIG_UNBLOCK, &mask, NULL);
            setpgid(0,0);
            ///
            if (execvp(argv[0], argv) < 0) {
                printf("Command not found");
                exit(0);
            }
         }
        else { //state of process: FG == foreground, BG== background
             if (!bg) {
                 addjob(jobs, pid, FG, comdline);
                 sigprocmask(SIG_UNBLOCK, &mask, NULL);
                 waitfg(pid); //waits for pid to not be foreground process
             }
             else { 
                   // same as above, except swap FG for BG and no waitfg()
             }
        }
    }
return;
}

0 个答案:

没有答案