Gibt es eine Möglichkeit, den Ursprung eines in Red Hat Enterprise Linux 5 (SIGTERM usw.) gesendeten Signals herauszufinden? Ich fange regelmäßig einen BEGRIFF in einer Anwendung ein und habe keine Ahnung, woher er kommt.
13
Die Manpage für sigaction(2)
schlägt vor, dass die PID des Signalsenders in der an Ihren Signalhandler übergebenen Struktur siginfo_t verfügbar ist. Dies setzt natürlich voraus, dass Sie sigaction () verwenden.
Von der Manpage:
Die Sigaktionsstruktur ist wie folgt definiert:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
Und die siginfo_t
Struktur sieht so aus:
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 */
}
Auf Plattformen mit DTrace (OS X, Solaris,… andere?) Können Sie es mit einem Test wie diesem verwenden, um die gewünschten Informationen zu protokollieren:
Ich habe dies anhand eines Skripts unter http://www.brendangregg.com/DTrace/dtrace_oneliners.txt sowie einiger zusätzlicher "relevanter Variablennamen" -Tipps unter /programming//a/10465606/179583 überprüft . und scheint unter einigen grundlegenden Tests zu funktionieren. Nun, wenn nur mein Prozess unerwartet wieder sterben würde! ;-)
quelle
strace
welche, die den gleichen Zweck erfüllen, wenn ich mich nicht irre. Ich konnte die von einem Prozess empfangenen Signale anhand dieses Artikels verfolgen .Nein, Sie können nicht wissen, wer ein Signal sendet.
quelle