stable
This commit is contained in:
parent
13273c5d4f
commit
647706c91e
40
minishell.c
40
minishell.c
|
@ -45,7 +45,7 @@ void handler_sigchld(int sig_num)
|
||||||
|
|
||||||
if (WIFSTOPPED(wait_code))
|
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))
|
else if (WIFCONTINUED(wait_code))
|
||||||
{
|
{
|
||||||
|
@ -53,21 +53,21 @@ void handler_sigchld(int sig_num)
|
||||||
}
|
}
|
||||||
else if (WIFEXITED(wait_code))
|
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);
|
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);
|
printf("[%d] %d killed: %s\n", job->id, job->pid, job->cmd);
|
||||||
supprimer(&jobs, job->pid);
|
supprimer(&jobs, job->pid);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} while (pid_fils > 0);
|
||||||
|
|
||||||
if (prompting)
|
if (prompting)
|
||||||
{
|
{
|
||||||
siglongjmp(goto_prompt, sig_num);
|
siglongjmp(goto_prompt, sig_num);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} while (pid_fils > 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handler_sigint(int sig_num)
|
void handler_sigint(int sig_num)
|
||||||
|
@ -93,22 +93,6 @@ void handler_sigtstp(int sig_num)
|
||||||
siglongjmp(goto_prompt, 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[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
initialiser(&jobs);
|
initialiser(&jobs);
|
||||||
|
@ -201,7 +185,6 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
kill(job->pid, SIGCONT);
|
kill(job->pid, SIGCONT);
|
||||||
pause();
|
pause();
|
||||||
attendre(job->pid);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd->seq[0][0], "stop"))
|
else if (!strcmp(cmd->seq[0][0], "stop"))
|
||||||
|
@ -251,7 +234,18 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // foreground
|
{ // 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