Existe uma maneira de descobrir a origem de um sinal enviado no Red Hat Enterprise Linux 5 (SIGTERM etc.)? Estou interceptando regularmente um TERM em um aplicativo e não tenho ideia de onde ele vem.
13
A página de manual sigaction(2)
sugere que o PID do remetente do sinal está disponível na estrutura siginfo_t passada para o manipulador de sinal. Obviamente, isso requer que você use sigaction ().
Na página do manual:
A estrutura de sigação é definida como algo como:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
E a siginfo_t
estrutura fica assim:
siginfo_t {
int si_signo; /* Signal number */
int si_errno; /* An errno value */
int si_code; /* Signal code */
int si_trapno; /* Trap number that caused
hardware-generated signal
(unused on most architectures) */
pid_t si_pid; /* Sending process ID */
uid_t si_uid; /* Real user ID of sending process */
int si_status; /* Exit value or signal */
clock_t si_utime; /* User time consumed */
clock_t si_stime; /* System time consumed */
sigval_t si_value; /* Signal value */
int si_int; /* POSIX.1b signal */
void *si_ptr; /* POSIX.1b signal */
int si_overrun; /* Timer overrun count; POSIX.1b timers */
int si_timerid; /* Timer ID; POSIX.1b timers */
void *si_addr; /* Memory location which caused fault */
int si_band; /* Band event */
int si_fd; /* File descriptor */
}
Em plataformas com DTrace (OS X, Solaris, ... outros?), Você pode usá-lo com uma sonda como essa para registrar as informações que procura:
Baseei isso em um script encontrado na parte inferior de http://www.brendangregg.com/DTrace/dtrace_oneliners.txt, além de algumas dicas adicionais de "nomes de variáveis relevantes" em /programming//a/10465606/179583 , e parece funcionar em alguns testes básicos. Agora, se meu processo inesperadamente morresse novamente! ;-)
fonte
strace
que serve ao mesmo propósito, se não me engano. Consegui rastrear os sinais recebidos por um processo seguindo este artigo .Não, você não pode saber quem está enviando um sinal.
fonte