是什么原因导致在Gentoo Linux集群上运行的C、MPI程序使用名为Sundails/CVODE(数值ODE解算器)的库,向我重复发送信号15。
这些代码是由MPI、Sundals、Linux、C还是谁发布的
请注意,我基本上是以下技术的初学者:C、MPI、Sundals/CVODE和Linux
通过谷歌搜索,我找不到任何相关信息。我甚至不知道从哪里开始找。(这是其中的一个问题,“任何有帮助的东西”都可以从字面上理解。)
(作为旁白/事后思考,为什么Chrome的字典不识别“谷歌搜索”这个词?)
这表示linux已经向您的进程交付了一个SIGTERM。这通常是在其他进程的请求下(通过kill()),但也可以由进程发送到自身(使用raise())。此信号要求有序关闭进程
如果需要信号号的快速备忘单,请打开bash shell并执行以下操作:
$kill-l
1) 信号机信号机信号机信号机信号机
5) SIGTRAP 6)SIGABRT 7)SIGBUS 8)SIGFPE
9) SIGKILL 10)SIGUSR1 11)SIGSEGV 12)SIGUSR2
13) SIGPPIPE 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
SIGRTMIN+1 36)SIGRTMIN+2 37)SIGRTMIN+3 38)SIGRTMIN+4
SIGRTMIN+5 40)SIGRTMIN+6 41)SIGRTMIN+7 42)SIGRTMIN+8
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
您可以使用适当的信号处理程序来确定发送方,如:
#包括<;信号h>;
#包括<;标准h>;
#包括<;stdlib.h>;
无效sigterm_处理程序(int信号、siginfo_t*info、无效*_未使用)
{
fprintf(stderr,“从pid=%u的进程接收到SIGTERM”,
信息->;si_pid);
出口(0);
}
内部主(空)
{
结构sigaction操作={
.sa_handler=NULL,
.sa_sigaction=sigterm_handler,
.sa_mask=0,
.sa_flags=sa_SIGINFO,
.sa_restorer=NULL
};
sigation(SIGTERM和action,NULL);
睡眠(60);
返回0;
}
请注意,信号处理程序还包括对exit()的调用。您的程序也可以通过忽略该信号继续执行,但通常不建议这样做(如果是用户这样做,如果您的进程没有退出,那么很有可能会出现SIGKILL,并且您失去了执行任何清理的机会)