stable
This commit is contained in:
parent
13273c5d4f
commit
647706c91e
46
minishell.c
46
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue