Команда Kill

Thank you for reading this post, don't forget to subscribe!

Коман­да kill явля­ет­ся обо­лоч­кой, встро­ен­ной в боль­шин­ство обо­ло­чек, полу­чен­ных из Bourne, таких как Bash и Zsh. Пове­де­ние коман­ды немно­го отли­ча­ет­ся меж­ду обо­лоч­ка­ми и авто­ном­ным испол­ня­е­мым фай­лом /bin/kill.

Исполь­зуй­те коман­ду type для отоб­ра­же­ния всех мест в вашей систе­ме, содер­жа­щих kill:

Вывод выше гово­рит о том, что встро­ен­ная обо­лоч­ка име­ет при­о­ри­тет над авто­ном­ным испол­ня­е­мым фай­лом и исполь­зу­ет­ся вся­кий раз, когда вы печа­та­е­те kill. Если вы хоти­те исполь­зо­вать дво­ич­ный файл, вве­ди­те пол­ный путь к фай­лу /bin/kill. В этой ста­тье мы будем исполь­зо­вать встро­ен­ную функ­цию Bash.

Син­так­сис коман­ды kill при­ни­ма­ет сле­ду­ю­щую форму:

Коман­да kill отправ­ля­ет сиг­нал ука­зан­ным про­цес­сам или груп­пам про­цес­сов, застав­ляя их дей­ство­вать в соот­вет­ствии с сиг­на­лом. Если сиг­нал не ука­зан, по умол­ча­нию исполь­зу­ет­ся зна­че­ние -15 (-TERM).

Наи­бо­лее часто исполь­зу­е­мые сигналы:

  • 1( HUP) – Пере­за­гру­зить процесс.
  • 9( KILL) – Убить процесс.
  • 15( TERM) – Изящ­но оста­но­вить процесс.

Что­бы полу­чить спи­сок всех доступ­ных сиг­на­лов, вызо­ви­те коман­ду с опци­ей -l:

Сиг­на­лы могут быть ука­за­ны тре­мя раз­лич­ны­ми способами:

  1. Исполь­зуя номер (напри­мер, -1 или -s 1).
  2. Исполь­зуя пре­фикс «SIG» (напри­мер, -SIGHUP или -s SIGHUP).
  3. Без пре­фик­са «SIG» (напри­мер, -HUP или -s HUP).

Сле­ду­ю­щие коман­ды экви­ва­лент­ны друг другу:

 

PID, предо­став­лен­ные коман­де kill, могут быть одним из следующих:

  • Если PID боль­ше нуля, сиг­нал отправ­ля­ет­ся про­цес­су с иден­ти­фи­ка­то­ром, рав­ным PID.
  • Если PID рав­но нулю, сиг­нал отправ­ля­ет­ся всем про­цес­сам в теку­щей груп­пе про­цес­сов. Дру­ги­ми сло­ва­ми, сиг­нал отправ­ля­ет­ся всем про­цес­сам, при­над­ле­жа­щим GID обо­лоч­ки, кото­рая вызва­ла коман­ду kill. Исполь­зуй­те коман­ду ps -efj для про­смот­ра иден­ти­фи­ка­то­ров груп­пы про­цес­сов (GID).
  • Если PID рав­но -1, сиг­нал отправ­ля­ет­ся всем про­цес­сам с тем же UID, что и поль­зо­ва­тель, вызы­ва­ю­щий коман­ду. Если вызы­ва­ю­щий поль­зо­ва­тель явля­ет­ся поль­зо­ва­те­лем root, сиг­нал отправ­ля­ет­ся всем про­цес­сам, кро­ме init и само­го про­цес­са kill.
  • Если PID мень­ше чем -1, сиг­нал отправ­ля­ет­ся всем про­цес­сам в груп­пе про­цес­сов eq с GID, рав­ным абсо­лют­но­му зна­че­нию PID.

Обыч­ные поль­зо­ва­те­ли могут отправ­лять сиг­на­лы сво­им соб­ствен­ным про­цес­сам, но не тем, кото­рые при­над­ле­жат дру­гим поль­зо­ва­те­лям, в то вре­мя как поль­зо­ва­тель root может отправ­лять сиг­на­лы про­цес­сам дру­гих пользователей.

 

Что­бы завер­шить или завер­шить про­цесс с помо­щью коман­ды kill, сна­ча­ла необ­хо­ди­мо най­ти иден­ти­фи­ка­ци­он­ный номер про­цес­са (PID). Вы може­те сде­лать это, исполь­зуя раз­лич­ные коман­ды , такие как top, ps, pidof и pgrep.

Допу­стим, бра­у­зер Firefox пере­стал отве­чать на запро­сы, и вам нуж­но убить про­цесс Firefox. Что­бы най­ти PID бра­у­зе­ра, исполь­зуй­те коман­ду pidof:

 

Коман­да напе­ча­та­ет иден­ти­фи­ка­то­ры всех про­цес­сов Firefox:

 

Как толь­ко вы узна­е­те номе­ра про­цес­сов, вы може­те пре­кра­тить их все, отпра­вив сиг­нал TERM:

 

Вме­сто того, что­бы искать PID и затем завер­шать про­цес­сы, вы може­те объ­еди­нить выше­ука­зан­ные коман­ды в одну:

 

Дру­гим рас­про­стра­нен­ным слу­ча­ем исполь­зо­ва­ния kill явля­ет­ся отправ­ка сиг­на­ла HUP, кото­рый сооб­ща­ет про­цес­сам о необ­хо­ди­мо­сти пере­за­гру­зить его настройки.

Напри­мер, что­бы пере­за­гру­зить Nginx, вам нуж­но отпра­вить сиг­нал веду­ще­му про­цес­су. Иден­ти­фи­ка­тор про­цес­са глав­но­го про­цес­са Nginx мож­но най­ти в фай­ле nginx.pid, кото­рый обыч­но нахо­дит­ся в ката­ло­ге /var/run.

Исполь­зуй­те catко­ман­ду, что­бы най­ти глав­ный PID:

 

Как толь­ко вы най­де­те глав­ный PID, пере­за­гру­зи­те настрой­ки Nginx, набрав:

При­ве­ден­ная выше коман­да долж­на запус­кать­ся от име­ни поль­зо­ва­те­ля root или поль­зо­ва­те­ля с при­ви­ле­ги­я­ми sudo.

Коман­да kill исполь­зу­ет­ся для отправ­ки сиг­на­ла про­цес­сам. Наи­бо­лее часто исполь­зу­е­мым сиг­на­лом явля­ет­ся SIGKILL или -9, кото­рый завер­ша­ет дан­ные процессы.