「シグナル15を受信」とは何ですか? 質問する

「シグナル15を受信」とは何ですか? 質問する

C、MPIプログラムでライブラリを使用するときに、サンダイアル/CVODE(数値 ODE ソルバー) を Gentoo Linux クラスターで実行して、繰り返し結果を表示しますSignal 15 received.

そのコードは MPI、Sundials、Linux、C などによって発行されているのでしょうか?

なお、私は C、MPI、SUNDIALS/CVODE、Linux の技術に関しては初心者です。

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

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

ベストアンサー1

これは、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 が続く可能性が高く、クリーンアップを行う機会が失われます)。

おすすめ記事