Сначала отвечу на ваш второй вопрос: SIGSTOPи SIGKILLне может быть пойман приложением, но любой другой сигнал может, даже SIGSEGV. Это свойство полезно для отладки - например, при правильной поддержке библиотеки вы можете прослушать SIGSEGVи сгенерировать обратную трассировку стека, чтобы показать, где именно произошла ошибка.
Официальное слово (в любом случае для Linux) о том, что делает каждый сигнал, можно получить, набрав man 7 signalв командной строке Linux. http://linux.die.net/man/7/signal содержит ту же информацию, но таблицы труднее читать.
Однако, без некоторого опыта с сигналами, из коротких описаний трудно понять, что они делают на практике, поэтому вот моя интерпретация:
Срабатывает от клавиатуры
SIGINTпроисходит , когда вы попали CTRL+C.
SIGQUITзапускается CTRL+\и сбрасывает ядро.
SIGTSTPприостанавливает вашу программу, когда вы нажимаете CTRL+Z. В отличие от этого SIGSTOP, его можно отловить, что дает программам viвозможность перевести терминал в безопасное состояние перед тем, как приостановить работу.
Терминальные взаимодействия
SIGHUP («Зависание») - это то, что происходит, когда вы закрываете свой xterm (или иным образом отключаете терминал) во время работы вашей программы.
SIGTTINи SIGTTOUприостановить вашу программу, если она пытается читать или записывать в терминал, пока он работает в фоновом режиме. Чтобы SIGTTOUэто произошло, я думаю, что программа должна писать /dev/tty, а не просто стандартный вывод.
Вызывается исключением процессора
Это означает, что ваша программа пыталась сделать что-то не так.
SIGILLозначает незаконную или неизвестную инструкцию процессора. Это может произойти, например, если вы попытались получить прямой доступ к портам ввода-вывода процессора.
SIGFPEозначает, что произошла аппаратная математическая ошибка; скорее всего программа пыталась делить на ноль.
SIGSEGV означает, что ваша программа пыталась получить доступ к не отображенной области памяти.
SIGBUSозначает, что программа неправильно обращалась к памяти каким-либо другим способом; Я не буду вдаваться в подробности для этого резюме.
Процесс взаимодействия
SIGPIPEпроизойдет, если вы попытаетесь записать в канал после того, как читатель канала закроет их конец. См man 7 pipe.
SIGCHLDпроисходит, когда созданный вами дочерний процесс либо завершается, либо приостанавливается ( SIGSTOPили аналогичным образом).
Полезно для самосигнализации
SIGABRTобычно вызывается программой, вызывающей abort()функцию, и по умолчанию вызывает дамп ядра. Вроде "кнопка паники".
SIGALRMвызвано alarm()системным вызовом, который заставит ядро доставить SIGALRMпрограмму через указанное количество секунд. Смотрите man 2 alarmи man 2 sleep.
SIGUSR1и SIGUSR2используются, однако программа любит. Они могут быть полезны для сигнализации между процессами.
Отправлено администратором
Эти сигналы обычно отправляются из командной строки, с помощью killкоманды или fgили bgв случае SIGCONT.
SIGKILLи SIGSTOPявляются неблокируемыми сигналами. Первый всегда завершает процесс немедленно; вторая приостанавливает процесс.
SIGCONT возобновляет приостановленный процесс.
SIGTERMэто ловимая версия SIGKILL.