39

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

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

私は、C、MPI、SUNDIALS/CVODE、および Linux のテクノロジについてはほぼ初心者です。

メッセージをグーグルで検索しても、関連していると思われるものは何も見つかりません。どこから見始めたらいいのかもわかりません。(これは、「何でも役に立ちます」が文字通りに受け取られる質問の 1 つです。)

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

4

1 に答える 1

68

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

于 2013-05-23T20:52:40.807 に答える