web-dev-qa-db-ja.com

「Signal 15 received」とは

C、MPI SUNDIALS/CVODE (数値ODEソルバー)と呼ばれるライブラリを使用するプログラムがGentoo Linuxクラスターで実行され、繰り返しSignal 15 received.

そのコードは、MPI、Sundials、Linux、C、またはだれによって発行されていますか?

私は、C、MPI、SUNDIALS/CVODE、およびLinuxテクノロジーの初心者であることに注意してください。

関連するように見えるものは何もありません メッセージをグーグルで検索 。どこから探し始めればよいかさえわかりません。 (これは、文字通り「何でも助けになる」という質問の1つです。)

(余談ですが、Chromeの辞書が「グーグル」という単語を認識しないのはなぜですか?)。

28
Jeff

これは、LinuxがSIGTERMをプロセスに配信したことを示しています。これは通常、(kill()を介して)他のプロセスの要求に応じて行われますが、(raise()を使用して)プロセスからそれ自体に送信することもできます。このシグナルは、プロセスの正常なシャットダウンを要求します。

シグナル番号の簡単なチートシートが必要な場合は、bashシェルを開き、次のことを行います。

_$ 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    
_

次のような適切なシグナルハンドラを使用して、送信者を決定できます。

_#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;
}
_

シグナルハンドラーには、exit()への呼び出しも含まれていることに注意してください。シグナルを無視してプログラムを実行し続けることもできますが、これは一般的にお勧めしません(ユーザーがそれを実行している場合は、プロセスが終了しない場合にSIGKILLが続く可能性が高いです。その場合、クリーンアップを行う機会を失いました)。

46
FatalError