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