Подтвердить что ты не робот

Что такое "Сигнал 15 получен",

Что может вызвать программу C, MPI, используя библиотеку под названием SUNDIALS/CVODE (численный решатель ODE), запущенный на кластере Gentoo Linux, чтобы дать мне повторение Signal 15 received.?

Этот код выдается MPI, Sundials, Linux, C или кто?

Обратите внимание, что я в значительной степени новичок со следующими технологиями: C, MPI, SUNDIALS/CVODE и Linux.

Я не могу найти ничего, что похоже на googling сообщение. Я даже не знаю, с чего начать смотреть. (Это один из тех вопросов, когда "что-то помогает" следует воспринимать буквально.)

(Как в стороне/после того, почему словарь Chrome не распознает слово "googling"?).

4b9b3361

Ответ 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, если ваш процесс не выйдет, и вы потеряли возможность сделать любую очистку тогда).