Para responder à sua segunda pergunta primeiro: SIGSTOPe SIGKILLnão pode ser capturado pelo aplicativo, mas todos os outros sinais podem, inclusive SIGSEGV. Essa propriedade é útil para depuração - por exemplo, com o suporte correto da biblioteca, você pode escutar SIGSEGVe gerar um backtrace de pilha para mostrar exatamente onde esse segfault aconteceu.
A palavra oficial (para o Linux, de qualquer maneira) sobre o que cada sinal faz está disponível digitando man 7 signalem uma linha de comando do Linux. http://linux.die.net/man/7/signal tem as mesmas informações, mas as tabelas são mais difíceis de ler.
No entanto, sem alguma experiência com sinais, é difícil saber pelas breves descrições o que eles fazem na prática, então aqui está minha interpretação:
Acionado pelo teclado
SIGINTacontece quando você bate CTRL+C.
SIGQUITé acionado por CTRL+\e despeja o núcleo.
SIGTSTPsuspende seu programa quando você bate CTRL+Z. Ao contrário SIGSTOP, é alcançável, o que dá aos programas via chance de redefinir o terminal para um estado seguro antes de se suspender.
Interações terminais
SIGHUP ("hangup") é o que acontece quando você fecha o xterm (ou desconecta o terminal) enquanto o programa está em execução.
SIGTTINe SIGTTOUpause seu programa se ele tentar ler ou gravar no terminal enquanto estiver em execução em segundo plano. Para SIGTTOUque isso aconteça, acho que o programa precisa estar gravando /dev/tty, não apenas o stdout padrão.
Acionado por uma exceção de CPU
Isso significa que seu programa tentou fazer algo errado.
SIGILLsignifica uma instrução ilegal ou desconhecida do processador. Isso pode acontecer se você tentar acessar as portas de E / S do processador diretamente, por exemplo.
SIGFPEsignifica que houve um erro de matemática no hardware; provavelmente o programa tentou dividir por zero.
SIGSEGV significa que seu programa tentou acessar uma região não mapeada da memória.
SIGBUSsignifica que o programa acessou a memória incorretamente de alguma outra maneira; Não entrarei em detalhes neste resumo.
Interação de processo
SIGPIPEacontece se você tentar gravar em um tubo depois que o leitor do tubo fechar sua extremidade. Veja man 7 pipe.
SIGCHLDacontece quando um processo filho que você criou fecha ou é suspenso (por SIGSTOPou semelhante).
Útil para auto-sinalização
SIGABRTgeralmente é causado pelo programa que chama a abort()função e causa um dump principal por padrão. Uma espécie de "botão de pânico".
SIGALRMé causado pela alarm()chamada do sistema, que fará com que o kernel entregue um SIGALRMprograma ao programa após um número especificado de segundos. Veja man 2 alarme man 2 sleep.
SIGUSR1e SIGUSR2são usados como o programa gosta. Eles podem ser úteis para sinalizar entre processos.
Enviado pelo administrador
Esses sinais geralmente são enviados a partir do prompt de comandos, via killcomando, fgou bgno caso de SIGCONT.
SIGKILLe SIGSTOPsão os sinais desbloqueáveis. O primeiro sempre termina o processo imediatamente; o segundo suspende o processo.
SIGCONT retoma um processo suspenso.
SIGTERMé uma versão capturável de SIGKILL.