LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

могут быть ситуации, когда нужно прибить не самый родительский процесс из сессии (screen, tmux, chroot), а начиная с какой-то определённой вложенности. походу, не всё так определённо.

И да, выбрать кому слать сигнал - отдельная проблема. А ещё, родительский процесс сессии это обычно шелл (bash например). В стандартной реализации решена просто: сигнал шлётся всем кто приписан к терминалу. Шелл сам сообщает «мне не надо» (signal(SIGINT,SIG_IGN);), проги обычно такое не делают. А вот отличить шелл от проги, которая нелегитимно заигнорила SIGINT, в общем случае довольно сложная задача. Хотя костыльную реалзацию сделать несложно: если имя бинарника = /bin/*sh и заигнорен SIGINT - считаем процесс интерактивным шеллом и не убиваем, остальным шлём SIGKILL.

Исходная версия firkax, :

могут быть ситуации, когда нужно прибить не самый родительский процесс из сессии (screen, tmux, chroot), а начиная с какой-то определённой вложенности. походу, не всё так определённо.

И да, выбрать кому слать сигнал - отдельная проблема. А ещё, родительский процесс сессии это обычно шелл (bash например). В стандартной реализации решена просто: сигнал шлётся всем кто приписан к терминалу. Шелл сам сообщает «мне не надо» (signal(SIGINT,SIG_IGN);), проги обычно такое не делают. А вот отличить шелл от проги, которая нелегитимно заигнорила SIGINT можно, в общем случае довольно сложная задача.