Signals are a limited form of inter-process communication (IPC), typically used in Unix, Unix-like, and other POSIX-compliant operating systems. A signal is an asynchronous notification sent to a process or to a specific thread within the same process in order to notify it of an event that occurred. Signals originated in 1970s Bell Labs Unix and have been more recently specified in the POSIX standard.

Command line execution

Terminalbash
sed in Unix, Unix-like, and other POSIX-compliant operating systems. A signal is an asynchronous notification sent to a process or to a specific thread within the same process in order to notify it of an event that occurred. Signals originated in 1970s Bell Labs Unix and have been more recently specified in the POSIX standard. When a signal is sent, the operating system interrupts the target process’ normal flow of execution to deliver the signal. Execution can be interrupted during any non-atomic instruction. If the process has previously registered a signal handler, that routine is executed. Otherwise, the default signal handler is executed. Embedded programs may find signals useful for interprocess communications, as the computational and memory footprint for signals is small. Signals are similar to interrupts, the difference being that interrupts are mediated by the processor and handled by the kernel while signals are mediated by the kernel (possibly via system calls) and handled by processes. The kernel may pass an interrupt as a signal to the process that caused it (typical examples are SIGSEGV, SIGBUS, SIGILL and SIGFPE).  $ vim linux_signal.c  #include <signal.h> #include <stdio.h> #include <unistd.h> void ouch(int sig) {         printf("OUCH! - I got signal %d\n", sig);         (void) signal(SIGINT, SIG_DFL); } int main() {         (void) signal(SIGINT, ouch);         while(1) {                 printf("Hello World!\n");                 sleep(1);         } }  $ gcc -o linux_signal linux_signal.c  Note: below command starts the execution of main, which is an infinite loop printing “Hello World” text on new line, after every 1 sec, to interrupt this using signal, press “Ctrl+C” $ ./linux_signal Hello World! Hello World! Hello World! Hello World! ^COUCH! – I got signal 2 Hello World! Hello World! Hello World! Hello World! ^C The declaration of Linux/Unix signal looks like as below,        #include <signal.h>        typedef void (*sighandler_t)(int);        sighandler_t signal(int signum, sighandler_t handler); The behavior of signal() varies across UNIX versions, and has also varied historically across different versions of Linux. Avoid its use: use sigaction(2) instead. See Portability below. signal() sets the disposition of the signal signum to handler, which is either SIG_IGN, SIG_DFL, or the address of a programmer-defined function (a “signal handler”). Following command, provides the list of all possible supported signals by the Linux. $ 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

Risk level: destructive. Review the command before running it.

Implementation details

When a signal is sent, the operating system interrupts the target process’ normal flow of execution to deliver the signal. Execution can be interrupted during any non-atomic instruction. If the process has previously registered a signal handler, that routine is executed. Otherwise, the default signal handler is executed. Embedded programs may find signals useful for interprocess communications, as the computational and memory footprint for signals is small.

Gotchas and common issues

  • Permission checks - verify user access rights and sudo privileges before executing system-level operations.

  • Environment configuration - double-check path variables and dependency versions to prevent runtime failures.

  • Backup safeguards - maintain configuration backups before applying system or database modifications.

Following these steps ensures clean configuration and reliable execution for understanding linux signals with simple c program.