Was könnte ein C, MPI-Programm verursachen, das eine Bibliothek namens SONNENUHREN/CVODE (ein numerischer ODE-Löser), der auf einem Gentoo-Linux-Cluster läuft, um mir wiederholt zu geben Signal 15 received.
?
Wird dieser Code von MPI, Sundials, Linux, C oder wem herausgegeben?
Beachten Sie, dass ich mit den folgenden Technologien so ziemlich ein Anfänger bin: C, MPI, SUNDIALS/CVODE und Linux.
Ich kann nichts finden, was verwandt zu sein scheint Nachricht googeln. Ich weiß gar nicht wo ich anfangen soll zu suchen. (Das ist eine dieser Fragen, bei denen „alles hilft“ ganz wörtlich zu nehmen ist.)
(Nebenbei bemerkt, warum erkennt das Wörterbuch von Chrome das Wort “googeln” nicht?).
Dies zeigt an, dass Linux a geliefert hat SIGTERM
zu Ihrem Prozess. Dies geschieht normalerweise auf Anfrage eines anderen Prozesses (via kill()
), könnte aber auch von Ihrem Prozess an sich selbst gesendet werden (mit raise()
). Dieses Signal fordert ein ordnungsgemäßes Herunterfahren Ihres Prozesses an.
Wenn Sie einen schnellen Cheatsheet mit Signalnummern benötigen, öffnen Sie eine Bash-Shell und:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Sie können den Absender ermitteln, indem Sie einen geeigneten Signal-Handler verwenden, z. B.:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void sigterm_handler(int signal, siginfo_t *info, void *_unused)
{
fprintf(stderr, "Received SIGTERM from process with pid = %u\n",
info->si_pid);
exit(0);
}
int main (void)
{
struct sigaction action = {
.sa_handler = NULL,
.sa_sigaction = sigterm_handler,
.sa_mask = 0,
.sa_flags = SA_SIGINFO,
.sa_restorer = NULL
};
sigaction(SIGTERM, &action, NULL);
sleep(60);
return 0;
}
Beachten Sie, dass der Signal-Handler auch einen Aufruf an enthält exit()
. Es ist auch möglich, dass Ihr Programm weiter ausgeführt wird, indem das Signal ignoriert wird, aber dies wird im Allgemeinen nicht empfohlen (wenn es ein Benutzer tut, besteht eine gute Chance, dass ein SIGKILL folgt, wenn Ihr Prozess nicht beendet wird, und Sie haben dann Ihre Gelegenheit verpasst, etwas aufzuräumen).
Signal 15 ist normalerweise
SIGTERM
. Jemand hat Ihrem Programm gesagt, dass es beendet werden soll.– Daniel Fischer
23. Mai 2013 um 20:52 Uhr