blob: 5d88368e45c3d94989714b2676b0a6bf9327b3f1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* signal.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/16 09:16:16 by charles #+# #+# */
/* Updated: 2020/10/10 11:23:47 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include "eval.h"
#include "minishell.h"
/*
** \brief Interupt signal handler
** If no child is running, print a prompt
** Otherwise the currently running child
** \param signum Ignored (needed by signal function)
*/
void signal_sigint(int signum)
{
(void)signum;
if (g_state.killed || g_state.is_child)
return ;
if (g_child_pid != -1)
{
g_state.last_status = 1;
if (kill(g_child_pid, SIGINT) != -1)
ft_putchar('\n');
g_state.killed = true;
}
else
{
ft_putchar('\n');
print_prompt();
}
}
/*
** \brief Quit signal handler
** If a child is running send him a SIGQUIT
** \param signum Ignored (needed by signal function)
*/
void signal_sigquit(int signum)
{
if (g_state.killed)
return ;
(void)signum;
if (g_child_pid != -1)
{
g_state.last_status = 131;
kill(g_child_pid, SIGQUIT);
ft_putstr("Quit (core dumped)\n");
}
}
/*
** \brief Term signal handler, does nothing
** \param signum Ignored (needed by signal function)
*/
void signal_sigterm(int signum)
{
(void)signum;
}
|