进程不按预期在后台运行

时间:2017-12-02 11:24:22

标签: c process operating-system fork background-process

我的简单shell程序获取一个命令数组作为输入,如果&位于数组的末尾,子进程应该在后台运行,而父进程不应该等待子进程完成。 但是,当我编译并运行我的代码时,我插入的命令没有&&,并且它们都在背景中运行。我尝试输入sleep 50s作为输入来测试它。

int process_arglist(int count, char** arglist){
signal(SIGCHLD,SIG_IGN);
int pid = fork();
int flag=0; //turned to 1 in case there's a & or |

if(pid <0){ //check if fork failed
    fprintf(stderr, "ERROR: fork failed\n");
    return 1;
}

if(pid == 0){ // Child's proccess
    //check last arglist argument
    if (strcmp(arglist[count - 1], "&") == 0) {
        flag=1;
        setpgid(0, 0);
        arglist[count - 1] = NULL;
        if (execvp(*arglist, arglist) < 0) {     //execute the command
            fprintf(stderr, "ERROR: execvp failed\n");
            exit(1);
        }
    }


    if(flag==0){ //There is no &
        if (execvp(*arglist, arglist) < 0) {     //execute the command
            fprintf(stderr, "ERROR: execvp failed\n");
            exit(1);
        }

    }
    }
if(pid > 0){ //Parent's process
    return 1;
}

    return 0;

}

任何想法如何只在最后使用&进行输入?

0 个答案:

没有答案