c - 什么是 "Signal 15 received"

标签 c linux mpi ode

什么可能导致 C、MPI 程序使用名为 SUNDIALS/CVODE 的库? (一个数值 ODE 求解器)在 Gentoo Linux 集群上运行给我重复的 Signal 15 received.?

该代码是由 MPI、日晷、Linux、C 还是谁发布的?

请注意,我几乎是以下技术的初学者:C、MPI、SUNDIALS/CVODE 和 Linux。

我找不到与 googling the message 相关的任何内容.我什至不知道从哪里开始看。 (这是从字面上理解“任何帮助”的问题之一。)

(顺便说一句/事后想想,为什么 Chrome 的字典无法识别“谷歌搜索”这个词?)。

最佳答案

这表示 linux 已经向您的进程发送了一个 SIGTERM。这通常是应某些其他进程的请求(通过 kill()),但也可以由您的进程发送给它自己(使用 raise())。此信号请求有序关闭您的进程。

如果您需要一个快速的信号编号备忘单,请打开一个 bash shell 并:

$ 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,并且你失去了做任何清理的机会)。

关于c - 什么是 "Signal 15 received",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723626/

相关文章:

c - 如何在不知道未压缩数据大小的情况下使用 RtlDecompressBuffer?

linux - Bash 脚本重新获取文件

segmentation-fault - 使用电子围栏时 Openmpi 段错误

c++ - MPI c++ 环形拓扑发送和接收不同的值,同时只传递相同的值?

c - 如何使用一维数组在 C 中存储多个字符串或创建一个字符串数组?

c# - ECG/EKG 软件语言建议

php - 从当前目录下的 php 文件执行 git commit

linux - Nginx 上游健康检查模块

c - 需要 MPI 通信器创建数据包的逻辑是什么?

c - switch 语句不适用于变量为 '\n' 的位置,例如 Enter?