sigint не распространяется на фоновый дочерний процесс

Мне нужно отправить SIGINT, чтобы закончить процесс изящно, но я не могу.

Это образец, потому что среда, в которой выполняется выполнение, является «неизвестным» (сценарий bash на travis.com)

Мне удалось получить (имитировать) такое же поведение, запустив такой процесс (command &) &

 vagrant@host:~$ (sleep 40 &) & [1] 8473 vagrant@host:~$ ps -o pid,pgid,args PID PGID COMMAND 2787 2787 -bash 8474 8473 sleep 40 8490 8490 ps -o pid,pgid,args [1]+ Done ( sleep 40 & ) vagrant@host:~$ kill -INT 8474 ##### here I send SIGINT to the process vagrant@host:~$ kill -INT -8473 ##### here I send SIGINT to the process group vagrant@host:~$ ps -o pid,pgid,args PID PGID COMMAND 2787 2787 -bash 8474 8473 sleep 40 8559 8559 ps -o pid,pgid,args 

Я много гулял и много читал о сигналах и группах, и я не могу понять, что здесь происходит. В какой-то момент игнорируется сигнал? Что происходит? Как отправить SIGINT в этот «сон»?

EDIT : если используется SIGTERM, процесс уничтожается (возможно, родительская подоболочка убита?)

One Solution collect form web for “sigint не распространяется на фоновый дочерний процесс”

Чтобы неинтерактивная работа отвечала на SIGINT, вам нужно создать обработчик для SIGINT:

 $ ( (trap "echo Got SigInt" SIGINT; sleep 60) & ) & [1] 13619 $ [1]+ Done ( ( trap "echo Got SigInt" SIGINT; sleep 60 ) & ) $ ps -o pid,pgid,args PID PGID COMMAND 11972 11972 bash 13620 13619 bash 13621 13619 sleep 60 13622 13622 ps -o pid,pgid,args $ kill -INT 13620 $ kill -INT 13621 $ Got SigInt 

Отправка SIGINT в режим сна

Как предлагает Stéphane Chazelas в комментариях, если целью является возвращение к поведению SIGINT по умолчанию, мы можем просто использовать trap - SIGINT . Например:

 $ ( (trap - SIGINT; sleep 60) & ) & [1] 16690 $ ps -o pid,pgid,args PID PGID COMMAND 11972 11972 bash 16691 16690 bash 16692 16690 sleep 60 16693 16693 ps -o pid,pgid,args [1]+ Done ( ( trap - SIGINT; sleep 60 ) & ) $ kill -INT 16692 $ ps -o pid,pgid,args PID PGID COMMAND 11972 11972 bash 16698 16698 ps -o pid,pgid,args 
  • Почему Ctrl-C ведет себя иначе, чем kill -2
  • отправка сигнала через kill и pid = 0
  • Запустите HTTP-сервер python, который может быть остановлен кем-либо еще
  • Почему «kill -l» не отображает номера сигналов 32 и 33?
  • CentOS Запуск процесса не реагирует на сигналы kill, а не переключается по контексту
  • Почему мы используем kill -9 всегда
  • Interesting Posts

    Сравнение полей с разделителями

    KDE: как я могу сделать приложения присутствующими во всех действиях по умолчанию?

    Использование среды bash из внешнего раздела ОС

    Переменные оболочки в цикле for

    Выполнить команду в другом терминале

    Если я mmap файл из tmpfs, будет ли он удвоить использование памяти?

    efibootmgr: что, если я удалю все записи без руководства?

    Компьютер не загружается с любого носителя после установки вина на Ubuntu 13.10

    Зачем нам нужна функция перезагрузки в разных двоичных файлах?

    Как длина и ширина терминала передаются через SSH и telnet?

    , вернется один или два дня. Просмотр разных флагов

    определение firewalld-разрешений без SELinux в Debian

    Будет ли учетная запись заблокирована при входе в режим FTP на удаленный сервер, пароль которого уже истек в UNIX

    Попытка удалить криптовые разделы из графического установщика debian

    Перенумеровать зашифрованный раздел – sda3 на sda5

    Linux и Unix - лучшая ОС в мире.