diff --git a/src/built_in.c b/src/built_in.c index 848b6f0a7594ab158606b6ac3f28d5ed4ef39bb4..1644fdb21fff3b3bfbf578749722667960d92c66 100644 --- a/src/built_in.c +++ b/src/built_in.c @@ -37,13 +37,20 @@ int do_fg(int argc, char** argv) { if (!validate_fg_argv(argc, argv)) return -1; - int pid = waitpid(0,0,0); + int pid; + int stat; - if(pid == -1) - printf("Current: no such job\n"); - + pid = fork(); + waitpid(pid, &stat, 0); + + if(WIFEXITED(stat)) + { + printf("%d done", pid); + } else - printf("%d done\n", pid); + { + printf("%d running", pid); + } return 0; } diff --git a/src/commands.c b/src/commands.c index 55bcd9cda89e047247cdb13a6aa39d5c9293ac54..eea613d2966bbd1dfa0f8e09b1b188770476e096 100644 --- a/src/commands.c +++ b/src/commands.c @@ -59,30 +59,37 @@ int evaluate_command(int n_commands, struct single_command (*commands)[512]) } else if (strcmp(com->argv[0], "exit") == 0) { return 1; } - else { - - pid_t pid; - pid = fork(); - - switch(pid) + else { - case -1 : - //printf("fail\n"); - - case 0 : - execv(com->argv[0], com->argv); - fprintf(stderr, "%s: command not found\n", com->argv[0]); - return -1; - default : - wait((int*)0); - //printf("complete\n"); - return -1; + pid_t pid; + pid = fork(); + if(pid<0) + printf("FAIL \n"); + else if(pid==0) + { + if(strcmp(com->argv[0], "ls")==0 || strcmp(com->argv[0], "cat")==0) + { + char path[]= "/bin/"; + strcat(path, com->argv[0]); + com->argv[0]=path; + execv(com->argv[0], com->argv); + } + else if(strcmp(com->argv[0], "vim")==0) + { + char path[]="/usr/bin/"; + strcat(path, com->argv[0]); + com->argv[0]=path; + execv(com->argv[0], com->argv); + } + else + execv(com->argv[0], com->argv); + } + else + wait(&pid); } - } - } - return 0; + } } void free_commands(int n_commands, struct single_command (*commands)[512]) diff --git a/src/main.c b/src/main.c index de5e5291d299b1c97ecdb747f96dd94b61fdfd44..23cc7d10f3e98b73ab00ad521f647c1cc2f63c13 100644 --- a/src/main.c +++ b/src/main.c @@ -12,20 +12,20 @@ int main() { char buf[8096]; - signal(SIGINT, catch_sigint); - signal(SIGTSTP, catch_sigtstp); + catch_sigint(SIGINT); + catch_sigtstp(SIGTSTP); while (1) { fgets(buf, 8096, stdin); - struct single_command commands[512]; + struct single_command commands[512]; //argv int n_commands = 0; mysh_parse_command(buf, &n_commands, &commands); int ret = evaluate_command(n_commands, &commands); free_commands(n_commands, &commands); - n_commands = 0; + n_commands = 0; //argc if (ret == 1) { break; diff --git a/src/signal_handlers.c b/src/signal_handlers.c index a599b8a16e6a81c02099a4686de178919aa372fc..8e341220ffbf6587d1c53822f70afdd177ae2c86 100644 --- a/src/signal_handlers.c +++ b/src/signal_handlers.c @@ -5,10 +5,11 @@ void catch_sigint(int signalNo) { signal(signalNo, SIG_IGN); + return ; } void catch_sigtstp(int signalNo) { signal(signalNo, SIG_IGN); - + return ; }