Убийство процессов волей-неволей не гладкое движение: данные могут быть потеряны, плохо спроектированные приложения могут незаметно сломаться, что не может быть исправлено без переустановки ... но это полностью зависит от знания того, что и что небезопасно в данная ситуация. и что будет в опасности. Пользователь должен иметь некоторое представление о том, что делает или должен делать процесс и каковы его ограничения (дисковые операции ввода-вывода в секунду, rss / swap) и уметь оценивать, сколько времени должен занимать длительный процесс (например, копия файла, перекодирование в mp3, перенос электронной почты, резервное копирование, [ваш любимый таймсинк здесь].)
Кроме того, отправка SIGKILL
pid не гарантирует его уничтожения. Если он застрял в системном вызове или уже зомбирован ( Z
в ps
), он может продолжать зомбироваться. Это часто случается с ^ Z длительным процессом и забывающим, bg
прежде чем пытаться kill -9
это сделать. Простое fg
переподключение stdin / stdout и, возможно, разблокирование процесса, обычно после чего процесс завершается. Если он застрял в другом месте или в какой-либо другой форме тупика ядра, удалить его сможет только перезагрузка. (Процессы Zombie уже мертвы после того, SIGKILL
как обработаны ядром (дальнейший код пользователя не запускается), обычно есть причина в ядре (похожая на «блокировку» в ожидании завершения системного вызова) для завершения процесса.)
Кроме того, если вы хотите убить процесс и все его дочерние элементы, привыкните к вызову kill
с использованием отрицательного PID, а не только самого PID . Там нет никакой гарантии SIGHUP
, SIGPIPE
или SIGINT
других сигналов очистки после него, и раздражает наличие нескольких процессов для очистки (помните, монгрел?).
Бонусное зло: kill -9 -1
немного более разрушительно, чем kill -9 1
(Не делайте ни от имени root, если вы не хотите видеть, что происходит на одноразовой, неважной виртуальной машине)