Saturday, April 14, 2018

Catching signal , Basic one

Today, I will write a basic program that will catch CTRL+C.  I will demonstrate it by sending CTRL+C from another terminal.


 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
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

// Function telling what to do when we catch CTRL+C
void catch_signal (int sig_num)
{
 printf("Caught the signal %d\n", sig_num);
 fflush(stdout);
}

int main()
{
 // Registering the Signal Handler
 signal(SIGINT,catch_signal);

 printf("Waiting for the user to send CTRL+C\n");
 fflush(stdout);

 // Waiting for signal
 pause();
 printf("Finished handling the signal\n");

 return 0;
}

Steps involved in signal programming
  • Writing a Function that tells what to do when signal is caught
  • Registering the Signal, that tells what signal to catch and what corresponding function to be called
  • Waiting for the signal
I execute the program

root@kali:/media/root/persistence# ./a.out
Waiting for the user to send CTRL+C

Execution 1:
 
Now I hit Ctrl+C at this moment. The program continues

^CCaught the signal 2
Finished handling the signal

Execution 2:

In another terminal, I see the process ID and send signal '2' via kill command.


root@kali:/media/root/persistence# ps -aux | grep a.out
root      3620  0.0  0.0   4188   640 pts/0    S+   22:56   0:00 ./a.out
root      3622  0.0  0.0  12728   928 pts/1    S+   22:56   0:00 grep a.out
root@kali:/media/root/persistence# kill -s 2 3620

Program ends like this

root@kali:/media/root/persistence# ./a.out
Waiting for the user to send CTRL+C
Caught the signal 2
Finished handling the signal

How in this world, did I know the signal is 2. 'kill -l' provides the list of signals.


root@kali:/media/root/persistence# kill -l
 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP
 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX 

No comments:

Post a Comment