Весенний ботинок навести порядок на сигкилле

Я запускаю приложение SpringBoot. Я добавил некоторые действия по очистке, используя аннотацию @PreDestroy. Когда я завершаю процесс, используя SIGTERM, то есть kill ${PID} tomcat, он выполняет все задачи очистки, вызывая метод, помеченный @PreDestroy. Однако, когда я использую SIGKILL, то есть kill -9 ${PID} tomcat, очистка не выполняется.

Есть ли какой-нибудь способ заставить приложение выполнять всю работу перед уничтожением, когда оно завершается с помощью SIGKILL?

1 ответ

Нет, нет регулярное kill ожидает завершения процесса, пока kill -9 не делает и убивает это немедленно. Важно то, что сигналы SIGKILL и SIGSTOP не могут быть перехвачены, заблокированы или проигнорированы. Сигнал man 7 показывает краткое изложение того, что означает каждый сигнал:

   Signal     Value     Action   Comment
   ──────────────────────────────────────────────────────────────────────
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
   SIGINT        2       Term    Interrupt from keyboard
   SIGQUIT       3       Core    Quit from keyboard
   SIGILL        4       Core    Illegal Instruction
   SIGABRT       6       Core    Abort signal from abort(3)
   SIGFPE        8       Core    Floating-point exception
   SIGKILL       9       Term    Kill signal
   SIGSEGV      11       Core    Invalid memory reference
   SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                 readers; see pipe(7)
   SIGALRM      14       Term    Timer signal from alarm(2)
   SIGTERM      15       Term    Termination signal
   SIGUSR1   30,10,16    Term    User-defined signal 1
   SIGUSR2   31,12,17    Term    User-defined signal 2
   SIGCHLD   20,17,18    Ign     Child stopped or terminated
   SIGCONT   19,18,25    Cont    Continue if stopped
   SIGSTOP   17,19,23    Stop    Stop process
   SIGTSTP   18,20,24    Stop    Stop typed at terminal
   SIGTTIN   21,21,26    Stop    Terminal input for background process
   SIGTTOU   22,22,27    Stop    Terminal output for background process
Другие вопросы по тегам