我使用的是C.例如目前正在實施& &功能的外殼,如果我們輸入CMD1 & & CMD2,然後CMD2只有當執行CMD1成功退出。我在想:是否在子進程中返回的功能,可以在父進程捕獲
int main() {
int i;
char **args;
while(1) {
printf("yongfeng's shell:~$ ");
args = get_line();
if (strcmp(args[0], "exit") == 0) exit(0); /* if it's built-in command exit, exit the shell */
if('&&') parse_out_two_commands: cmd1, cmd2;
if (execute(cmd1) != -1) /* if cmd1 successfully executed */
execute(cmd2); /* then execute the second cmd */
}
}
int execute(char **args){
int pid;
int status; /* location to store the termination status of the terminated process */
char **cmd; /* pure command without special charactors */
if(pid=fork() < 0){ //fork a child process, if pid<0, fork fails
perror("Error: forking failed");
return -1;
}
/* child */
else if(pid==0){ /* child process, in which command is going to be executed */
cmd = parse_out(args);
/* codes handleing I/O redirection */
if(execvp(*cmd, cmd) < 0){ /* execute command */
perror("execution error");
return -1;
}
return 0;
}
/* parent */
else{ /* parent process is going to wait for child or not, depends on whether there's '&' at the end of the command */
if(strcmp(args[sizeof(args)],'&') == 0){
/* handle signals */
}
else if (pid = waitpid(pid, &status, 0) == -1) perror("wait error");
}
}
所以我使用另一個函數int execute(char ** args)來做實際的工作。它的返回類型是int,因爲我想知道該命令是否成功退出。但我不確定父進程是否可以從子進程獲得返回值,因爲它們是兩個不同的進程。
或者我應該決定是否要在子進程中執行第二個命令,通過分支另一個進程來運行它?非常感謝。
與你的問題無關,但至少有兩個問題'strcmp(args [sizeof(args)],'&')' –
閱讀[高級Linux編程](http://advancedlinuxprogramming.com/) –