2

In Understanding The Linux Kernel:

Unix signals provide a mechanism for notifying processes of system events. Each event has its own signal number, which is usually referred to by a symbolic constant such as SIGTERM. There are two kinds of system events:

Asynchronous notifications For instance, a user can send the interrupt signal SIGINT to a foreground process by pressing the interrupt keycode (usually Ctrl-C) at the terminal.

Synchronous notifications For instance, the kernel sends the signal SIGSEGV to a process when it accesses a memory location at an invalid address.

and

... In general, a process may react to a signal delivery in two possible ways:

• Ignore the signal.

Asynchronously execute a specified procedure (the signal handler).

I was wondering what asynchronous and synchronous mean

  • in notifying processes of system events, and
  • in process reacting to a signal delivery?

Thanks.

Tim
  • 101,790

1 Answers1

2

Asynchronous means that the signal will be delivered and caught (if not ignored) the next time your program will be scheduled to run. It generally refers to signals sent by other processes (e.g. via kill, like SIGINT or SIGSTOP).

Synchronous means the signal is delivered immediately, because the program is being run (i.e. state running in the scheduler). Typically it is the direct result of the program execution and the signal is being sent by the kernel (e.g. SIGILL, SIGSEGV, ...).

xhienne
  • 17,793
  • 2
  • 53
  • 69
  • Thanks. (1) "Synchronous means the signal is delivered immediately, because the program is being run (i.e. state running in the scheduler)." When the process is waiting to run under schedule, will it be switched to run immediately as the signal is sent? Or does the cause of the signal require the process to be currently running instead of waiting for the scheduler to let it run, so that it is impossible that the process isn't running when the signal is sent? – Tim Aug 18 '17 at 00:54
  • (2) What do asynchronous and synchronous mean when a process reacts to a signal delivery? – Tim Aug 18 '17 at 00:56
  • By definition, a synchronous signal can only occur for a running program, it can not be waiting to be scheduled. 2) There is no difference, either the program is being run and it receives the signal immediately, or next time it is scheduled to run, it will be notified immediately that it has received a signal.
  • – xhienne Aug 18 '17 at 01:09
  • Thanks. (2) I guess you are talking the meaning of (a)synchronous when a process receives a signal. My question is about their meaning when a process handles a signal after receiving it as in "Asynchronously execute a specified procedure" – Tim Aug 18 '17 at 01:12
  • OK, I get it, sorry. In the receiver context, asynchronously means that it sets a signal handler and does its normal tasks, the signal handler being called when the signal is received. Synchronous means that the program actively waits for the signal to come and does nothing else. – xhienne Aug 18 '17 at 01:23
  • Thanks. In https://unix.stackexchange.com/a/230568/674, does "asynchronously" in "bash handles that SIGINT asynchronously, only after the currently running command has exited" mean that bash sets a signal handler and does its normal tasks, the signal handler being called when the signal is received? – Tim Aug 18 '17 at 01:28
  • @Tim You should ask Stéphane, I don't know bash internals. bash seems to process signals specially (see trap) therefore I think the signal handler is called immediately like any program but the effects of the signal (shell-wise) is delayed after the current command has finished. – xhienne Aug 18 '17 at 09:04