什么是"收到信号15"

Jef*_*eff 29 c linux mpi ode

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

该代码是由MPI,Sundials,Linux,C还是谁发布的?

请注意,我几乎是初学者,拥有以下技术:C,MPI,SUNDIALS/CVODE和Linux.

通过Google搜索消息,我找不到任何与之相关的内容.我甚至不知道从哪里开始看.(这是其中一个问题,其中"任何有用的"都是字面意思.)

(作为抛开/事后的想法,为什么Chrome的字典不能识别"google搜索"这个词?).

Fat*_*ror 48

这表明linux已经SIGTERM为您的进程提供了一个.这通常是应某些其他进程(via 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    
Run Code Online (Sandbox Code Playgroud)

您可以使用适当的信号处理程序来确定发件人,例如:

#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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,信号处理程序还包括对...的调用exit().你的程序也可以通过忽略信号继续执行,但一般不建议这样做(如果是用户这样做的话,如果你的进程没有退出,很可能会跟着一个SIGKILL,并且你失去了做任何清理的机会).

  • @Jeff:我已经用一个片段更新了我的帖子,它应该可以帮助您确定发件人的 pid。要查看它的实际情况,您可以运行该代码并从另一个 shell 运行“kill &lt;pid&gt;”以查看它打印发送者的 pid。 (2认同)