diff --git a/src/commands.c b/src/commands.c index cf22df40f90754dd216c174f61d1f83f90b13807..55bcd9cda89e047247cdb13a6aa39d5c9293ac54 100644 --- a/src/commands.c +++ b/src/commands.c @@ -58,26 +58,27 @@ int evaluate_command(int n_commands, struct single_command (*commands)[512]) return 0; } else if (strcmp(com->argv[0], "exit") == 0) { return 1; - } - else if(com->argv[0] > 0) { - pid_t pid; - pid = fork(); - - switch(pid) - { - case -1 : - printf("fail\n"); - case 0 : - execv(com->argv[0], com->argv); - printf("exec fail\n"); - default : - wait((int*)0); - printf("complete\n"); - exit(0); - } - } else { - fprintf(stderr, "%s: command not found\n", com->argv[0]); - return -1; + } + else { + + pid_t pid; + pid = fork(); + + switch(pid) + { + 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; + } } } diff --git a/src/main.c b/src/main.c index 77c78049273e013e278ad9021fa088531b636a97..de5e5291d299b1c97ecdb747f96dd94b61fdfd44 100644 --- a/src/main.c +++ b/src/main.c @@ -1,7 +1,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <signal.h> +#include "signal_handlers.h" #include "commands.h" #include "built_in.h" #include "utils.h" @@ -10,6 +12,9 @@ int main() { char buf[8096]; + signal(SIGINT, catch_sigint); + signal(SIGTSTP, catch_sigtstp); + while (1) { fgets(buf, 8096, stdin); diff --git a/src/signal_handlers.c b/src/signal_handlers.c index 4b6fe2e073f327917964b5327b6649f74bcbda1e..a599b8a16e6a81c02099a4686de178919aa372fc 100644 --- a/src/signal_handlers.c +++ b/src/signal_handlers.c @@ -1,11 +1,14 @@ +#include <signal.h> + #include "signal_handlers.h" void catch_sigint(int signalNo) { - // TODO: File this! + signal(signalNo, SIG_IGN); } void catch_sigtstp(int signalNo) { - // TODO: File this! + signal(signalNo, SIG_IGN); + }