我的简单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;
}
任何想法如何只在最后使用&
进行输入?