Завершение процесса в Linux. Что понимается под «убийством» программы?

завершение процесса в linux. что понимается под «убийством» программы?

Сигналы и способы завершения процесса

В Linux любой процесс может быть завершен несколькими способами. Наиболее распространенный из них - самостоятельная остановка. Она происходит после того как программа выполнила всю заложенную логику. В таком случае процесс вернет операционной системе код своего завершения. Он может сигнализировать об успешном выполнении или ошибке. В данном случае важно лишь то, что программа завершила свою работу корректно.

Существуют и другие ситуации, требующие ручного завершения работы программы. Такое может потребоваться, если процесс работает в фоновом режиме и в его задачи входит бесконечная обработка каких-либо событий. Также программа может зависнуть. При этом она, скорее всего, заблокирует некоторые ресурсы системы.

Для завершения работы процесса в Linux используется несколько специальных команд, но принцип их работы один и тот же. С помощью них вы посылаете операционной системе специальный сигнал и идентификационный номер процесса. Сигнал говорит о специфике остановки программы. Чаще всего используются SIGTERM (англ. Termination — завершение) и SIGKILL (англ. Kill — убийство).

SIGTERM пытается завершить работу программы корректно. Процесс в таком случае попробует завершиться самостоятельно. Например, если вы работали в текстовом редакторе, все изменения сохранятся на диск, а затем закрывается графический интерфейс. SIGKILL также останавливает выполнение программы, но более грубым способом. Это безусловный сигнал завершения. Он не дает шанса на корректную остановку. Операционная система «убьет» процесс, а также высвободит занимаемую им оперативную память и ресурсы.

Каждый тип сигнала имеет свой числовой код. Посмотреть все доступные виды сигналов и их коды можно с помощью команды kill -l. Более подробное описание каждого из них вы найдете в статье на википедии.

kill -l
 1) SIGHUP     2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT    7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV   12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
...

Завершение процесса по его PID

Если известен уникальный идентификационный номер процесса — PID, вы можете завершить его выполнение или убить с помощью команды kill. PID указывается в качестве первого параметра. При запуске команды kill без дополнительных опций, Linux посылает процессу сигнал SIGTERM. Для отправки другого сигнала его код нужно передать в опции.

#запустим текстовый редактор в фоновом режиме
gedit &
[1] 15892

#завершение работы с указанием кода сигнала и без
kill 15892
kill -9 15892

Заметка
Команда kill может завершить работу процесса, принадлежащего только текущему пользователю. Если вам нужно осуществить эту операцию над чужими процессами, необходимо войти в систему под администратором.

Завершение программы по её имени

Зачастую гораздо удобнее убить все процессы, принадлежащие конкретной программе. Для этого в Linux есть команда killall. Принцип её использования аналогичен команде kill, с тем лишь исключением, что вместо PID процесса указывается имя программы.

#обычная остановка работы процесса
killall gedit

#убийство процесса с указанием сигнала
killall -s 9 gedit

Дополнительные инструменты

Существует ещё несколько способов убийства процессов в Linux. Один из них связан с горячими клавишами. Если вы запустили программу в терминале и хотите завершить её не дожидаясь конца выполнения, нажмите сочетание клавиш Ctrl + C.

Также команда top, рассмотренная в прошлом уроке, имеет встроенный механизм завершения процессов. Для его использования необходимо нажать клавишу "k", ввести PID процесса и нажать Enter.

Последние публикации