it-swarm.com.de

Was ist "Signal 15 empfangen"

Was könnte dazu führen, dass ein C, MPI= mit einer Bibliothek namens SUNDIALS/CVODE (ein numerischer ODE-Löser), der auf einem Gentoo Linux-Cluster ausgeführt wird, mich wiederholt Signal 15 received.?

Wird dieser Code von MPI, Sundials, Linux, C oder von wem ausgegeben?

Beachten Sie, dass ich mit den folgenden Technologien so ziemlich Anfänger bin: C, MPI, SUNDIALS/CVODE und Linux.

Ich kann nichts finden, was mit googelt die Nachricht zusammenhängt. Ich weiß nicht einmal, wo ich anfangen soll zu suchen. (Dies ist eine jener Fragen, bei denen "alles hilft" wörtlich genommen werden muss.)

(Warum erkennt das Chrome-Wörterbuch nebenbei/nachher nicht das Wort "googeln"?).

28
Jeff

Dies zeigt an, dass das Linux ein SIGTERM an Ihren Prozess geliefert hat. Dies geschieht normalerweise auf Anforderung eines anderen Prozesses (über kill()), kann jedoch auch von Ihrem Prozess an sich selbst gesendet werden (mithilfe von raise()). Dieses Signal fordert Sie zum ordnungsgemäßen Herunterfahren Ihres Prozesses auf.

Wenn Sie ein kurzes 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 Signalhandler verwenden, z.

#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 Signalhandler auch einen Aufruf von exit() enthält. Es ist auch möglich, dass Ihr Programm weiterhin ausgeführt wird, indem Sie das Signal ignorieren. Dies wird jedoch im Allgemeinen nicht empfohlen Sie haben dann die Gelegenheit zur Bereinigung verpasst.

46
FatalError