Ускоренный курс на уничтожение программ командной строки / текстового режима
Чтобы уточнить комментарий @ AFH, если «SRM» является консольной программой (интерфейс командной строки), и вы запустили ее из терминала, просто нажмите Ctrl-z
, так как это заставляет ваш терминал отправлять процесс переднего плана, он управляет этим SIGSTOP
сигналом и отправляет его на задний план. Затем вы можете «вернуть его», выполнив команду fg
оболочки - это часть так называемого «управления заданиями», реализуемого интерактивными оболочками, и означает вывод фонового процесса на передний план (отсюда и «fg»), который включает в себя отправку процесса SIGCONT
сигнал среди прочего.
Конечно, просто остановить процесс, остановить его. В системах Unix-y, включая ОС на базе Linux, это делается путем отправки процессу одного из специальных сигналов - обычно SIGTERM
или SIGINT
. Попадание Ctrl-c
в терминал, который запускает процесс, заставляет процесс послать SIGINT
сигнал. kill
Программа может быть использована для отправки произвольных произвольных сигналов процессов.
Проблема с использованием kill
заключается в том, что для большинства его применений требуется, чтобы пользователь знал так называемый «PID» процесса, на который нужно отправить сигнал. ПИД является Р rocess ID entifier-целое число ≥ 1 уникальным во всех процессах, в данный момент под управлением операционной системы.
Управление заданиями оболочки облегчает задачу, поскольку у нее есть определенная мнемоника для ссылки на процессы, которыми она управляет: если вы ударили по фону текущего активного процесса нажатием Ctrl-z
, вы можете использовать jobs
команду, чтобы просмотреть список процессов, управляемых этой оболочкой. Например, я только что приостановил экземпляр mutt
и запустил jobs
после этого; вот что я вижу:
~$ jobs [1]+ Stopped mutt
Обратите внимание на этот [1]+
бит. Идентификатор 1
задания, назначенный этому процессу оболочкой. Это +
«дескриптор» для ссылки на последний фоновый процесс.
Таким образом, теперь вы можете использовать одну %1
или %+
с kill
командой для ссылки на этот процесс, как в
$ kill %1
или же
$ kill %+
... и все они отправят SIGTERM
в этот единый фоновый процесс.
Вот как вы можете убить неправильно работающую консольную программу.
Подробнее о синглахОбратите внимание, что эти SIGINT
и SIGTERM
сигналы могут быть «обработаны» процессом, который получил один из них. Это позволяет процессу выполнить определенные действия по очистке перед выходом.
Но иногда процесс может «зависнуть» - скажем, выполняя бесконечный цикл на процессоре из-за программной ошибки или застревая при попытке чтения / записи из / в файл на каком-то «мертвом» ресурсе, таком как отключенный сетевой ресурс. В этих случаях доставка SIGINT
или SIGTERM
, как правило, не удастся «раскрутить» процесс.
Чтобы справиться с такими случаями, существует специальный сигнал, SIGQUIT
которому назначен известный номер «9». Отправка процесса этим сигналом просто заставляет операционную систему принудительно обнулять процесс, не имея возможности вмешаться. Вот почему вы, скорее всего, видели это kill -9 $pid
заклинание в некоторых документах.
Другие опции
Есть и другие варианты, конечно.
Во-первых, существуют «удобные для пользователя» программы, такие как, htop
которые предоставляют вам доступный для поиска список запущенных процессов и позволяют вам отправлять любые из них по своему выбору.
Графические среды рабочего стола, такие как GNOME, XFCE, KDE и другие, обычно предоставляют приложение с графическим интерфейсом для того же.
Во-вторых, существуют более «хакерские» способы справиться с неправильным поведением процессов в тех случаях, когда эти «менеджеры задач» недоступны или по какой-то причине не соответствуют требованиям. Вот некоторые из них в произвольном порядке:
При запуске
xkill
утилита (в Debian и его производной она находится вx11-utils
пакете) показывает вам диагональный крестообразный курсор, с помощью которого вы должны выбрать любое окно, нажав на него, иxkill
принудительно отключит процесс, которому принадлежит это окно, от X сервер (программа, которая отображает весь ваш графический интерфейс).Эффект этого действия отличается между процессами, но если вы
xkill
используете окно терминала, оно отправитSIGHUP
сигнал процессам, которыми он управляет, и это обычно заставляет их выйти.pkill
Утилита (на Debian и его производных, в котором он находится наprocps
упаковке) может быть использован для передачи сигнала к набору процессов, имя которого совпадает с определенной строки.Итак, если вы хотите убить
srm
процесс, который, как вы знаете, выполняется в вашей системе, вы можете запустить$ pkill -9 srm
чтобы сбить все процессы, названные srm
в системе.