diff --git a/Q1 b/Q1 deleted file mode 100755 index 38fd488..0000000 Binary files a/Q1 and /dev/null differ diff --git a/minishell b/minishell index 9ffc9d8..99aa5e5 100755 Binary files a/minishell and b/minishell differ diff --git a/minishell.c b/minishell.c index fa4e1e2..13eef78 100644 --- a/minishell.c +++ b/minishell.c @@ -45,7 +45,7 @@ void handler_sigchld(int sig_num) if (WIFSTOPPED(wait_code)) { - printf("[%d] %d suspended: %s\n", job->id, job->pid, job->cmd); + printf("[%d] %d stopped: %s\n", job->id, job->pid, job->cmd); } else if (WIFCONTINUED(wait_code)) { @@ -53,21 +53,21 @@ void handler_sigchld(int sig_num) } else if (WIFEXITED(wait_code)) { - printf("[%d] %d done: %s\n", job->id, job->pid, job->cmd); + printf("[%d] %d exited: %s\n", job->id, job->pid, job->cmd); supprimer(&jobs, job->pid); } - else if (wait_code == 9) // SIGKILL + else if (wait_code == SIGKILL) { printf("[%d] %d killed: %s\n", job->id, job->pid, job->cmd); supprimer(&jobs, job->pid); } - - if (prompting) - { - siglongjmp(goto_prompt, sig_num); - } } } while (pid_fils > 0); + + if (prompting) + { + siglongjmp(goto_prompt, sig_num); + } } void handler_sigint(int sig_num) @@ -93,22 +93,6 @@ void handler_sigtstp(int sig_num) siglongjmp(goto_prompt, sig_num); } -void attendre(int pid) -{ - pid_t id = waitpid(pid, &wait_code, 0); // on attend la fin de l'exec du fils - - if (id == -1) - { // wait fail ? - fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno)); - exit(errno); - } - - if (wait_code) - { // execvp fail ? - fprintf(stderr, "ERROR: %d's execution failed, (%d) %s\n", pid, wait_code, strerror(wait_code)); - } -} - int main(int argc, char *argv[]) { initialiser(&jobs); @@ -201,7 +185,6 @@ int main(int argc, char *argv[]) } kill(job->pid, SIGCONT); pause(); - attendre(job->pid); continue; } else if (!strcmp(cmd->seq[0][0], "stop")) @@ -251,7 +234,18 @@ int main(int argc, char *argv[]) } else { // foreground - attendre(pid_fils); + pid_t id = waitpid(pid_fils, &wait_code, 0); + + if (id == -1) + { // wait fail ? + fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno)); + exit(errno); + } + + if (wait_code) + { // execvp fail ? + fprintf(stderr, "ERROR: command failed, (%d) %s\n", wait_code, strerror(wait_code)); + } } } }