Today, I will write a basic program that will catch CTRL+C. I will demonstrate it by sending CTRL+C from another terminal.
Steps involved in signal programming
Execution 1:
Now I hit Ctrl+C at this moment. The program continues
Execution 2:
In another terminal, I see the process ID and send signal '2' via kill command.
Program ends like this
How in this world, did I know the signal is 2. 'kill -l' provides the list of signals.
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
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