As per my understanding, when the signal denoted by signum occurs/is raised, the action is taken which can be either SIG_DFL, SIG_IGN or a function/handler. What i don't understand is, when we write for example signal(SIGPROF, handler); isn't this supposed to be asynchronous? however the code is executed sequentially. So, when this function is encountered, it is executed and when a signal is raised, how does it know what to do?