Я пытаюсь настроить процесс Linux, который блокирует SIGTERM
, который отправляется командой kill
(или любым другим процессом), но позволяет отправлять SIGTERM
изнутри себя (через системный вызов kill(2)
). ).
Возможно ли это?
Вот пример программы, которую я написал, но она SIG_BLOCKS
как для внешних, так и для внутренних сигналов, поэтому она не выполняет то, что я хочу:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
sigset_t sigs;
sigemptyset(&sigs);
sigaddset(&sigs, SIGTERM);
sigprocmask(SIG_BLOCK, &sigs, 0);
printf("Sleeping 30 secs, try killing me! (pid: %d)\n", getpid());
sleep(30);
printf("About to call kill\n");
kill(getpid(), SIGTERM);
printf("This never happens!\n");
return 1;
}
Вывод:
Sleeping 30 secs, try killing me! (pid: 29416)
About to call kill
This never happens!
Но это должно быть:
Sleeping 30 secs, try killing me! (pid: 29416)
About to call kill
Потому что процесс должен быть убит изнутри через kill(getpid(), SIGTERM)
.