CodeGym /Kurslar /Docker SELF /Proseslərin sonlandırılması: `kill`, `killall`, `pkill` k...

Proseslərin sonlandırılması: `kill`, `killall`, `pkill` komandaları

Docker SELF
Səviyyə , Dərs
Mövcuddur

Proseslərin sonlandırılması: kill, killall, pkill komandaları

1. Proseslərin sonlandırılması

Bugün bir addım irəli gedəcəyik və prosesləri effektiv şəkildə sonlandırmağa imkan verən komandaları öyrənəcəyik. Hazır olun, çünki "donmuş" proqramlara olan səbrinizin sonu yaxınlaşır!

Linux-da işləyən hər bir tətbiq və ya komanda — prosesdir. Bəs nə etməli, əgər proqram donubsa, prosessor resurslarının 100%-ni yeyirsə və ya artıq düzgün işləmirsə? Administratorun (və ya developerin) vəzifəsi — müdaxilə edib "üsyankar" prosesi sonlandırmaqdır. Linux-da bunun üçün tam bir alətlər arsenalı var: kill, killallpkill. Narahat olmayın, qorxulu adlara baxmayaraq, bizim məqsədimiz hər şeyi sındırmaq deyil. Daha çox, bu qayda yaratmağın zərif bir yoludur.


2. kill komandas

Əsaslar

kill komandası prosesləri onların identifikatoru (PID) üzrə dayandırır. PID — hər bir prosesə sistem tərəfindən verilən unikal nömrədir. Məsələn, əgər siz PID-i 1234 olan prosesi dayandırmaq istəyirsinizsə, aşağıdakı komandanı istifadə edin:

kill 1234

Linux təbiətcə olduqca demokratikdir, ona görə də kill komandası prosesi "ölməyinə" məcbur etmir, sadəcə ona dayandırılması üçün sorğu göndərir. Bu sorğuya "signal" deyilir. Default olaraq kill, SIGTERM (15) siqnalını göndərir.

Siqnal nədir?

Linux proseslərlə ünsiyyət qurmaq üçün siqnallardan istifadə edir. Bu, sanki müxtəlif niyyətlərlə poçt kartları göndərmək kimidir:

  • SIGTERM (15): "Xahiş edirəm, dayandırıl". Bu prosesə işi yekunlaşdırmaq üçün kibar xahişdir.
  • SIGKILL (9): "Artıq kifayətdir, sən işdən çıxarıldın!" Prosesi zorla dayandırmaqdır.
  • SIGHUP (1): "Hey, konfiqurasiyanı yenilə". Bəzi prosesləri dayandırmadan yenidən başlatmaq üçün istifadə edilir.

Prosesi zorla dayandırmaq nümunəsi:

kill -9 1234

Əgər proses SIGTERM ilə dayandırılmaqdan imtina edirsə, siz daha sərt siqnal — SIGKILL göndərə bilərsiniz.

Prosesin PID-ni necə öyrənmək olar?

kill komandasını istifadə etmək üçün sizə prosesin PID-si lazımdır. Bunun üçün artıq tanış olduğumuz ps, top və ya htop komandaları istifadə edilə bilər. Məsələn, ps aux komandasının nəticələri bütün işləyən prosesləri göstərəcək:

ps aux | grep firefox

Bu sorğu Firefox prosesini tapacaq və onun PID-sini göstərəcək.

Proses dayandırılıb, rahat nəfəs ala bilərsiniz. Amma əgər "özü-özünü asmış" proseslər birdən artıqdırsa, onda killallpkill komandaları işə düşür.


3. killall komandası

Kütləvi dayandırma üçün rahatlıq

killall komandası müəyyən bir adla olan bütün prosesləri dayandırmağa imkan verir. Siz PID-i əl ilə axtarmırsınız, hər şey daha asan olur. Məsələn, bütün işləyən Firefox instanslarını bağlamaq istəyirsinizsə:

killall firefox

kill komandası kimi, killall da proseslərə siqnallar göndərir. Konkret bir siqnal göstərə bilərsiniz:

killall -9 firefox

Faydalı məsləhət

killall kimi komandalarla ehtiyatlı olun. Əgər təsadüfən çox ümumi bir proses göstərsəniz, məsələn, killall python, bütün işləyən Python tətbiqlərinizi, o cümlədən server tapşırıqları və ya vacib skriptləri dayandıra bilərsiniz.

Hansı siqnallar dəstəklənir?

kill, killallpkill komandalarının hamısı üçün mövcud siqnalların siyahısına baxmaq üçün aşağıdakı komandanı istifadə edə bilərsiniz:

kill -l

4. pkill komandası

Prosesləri ada (və ya onun bir hissəsinə) görə axtarma

pkill komandası killall ilə oxşar işləyir, amma daha çevikdir. O, müəyyən şablona uyğun gələn prosesləri dayandırmağa imkan verir. Məsələn:

pkill fire

Bu komanda adında "fire" sözü olan bütün prosesləri dayandıracaq. Bu, prosesin adı uzun olduqda və ya yalnız bir hissəsini bildiyiniz hallarda faydalıdır.

İstifadəçilərə aid proseslərin dayandırılması

Müəyyən istifadəçilərə məxsus prosesləri dayandıra bilərsiniz. Məsələn:

pkill -u username

Bu, username istifadəçisinə aid bütün prosesləri dayandıracaq.

kill, killallpkill müqayisəsi

Komanda Xüsusiyyətlər
kill Prosesləri PID-ə görə dayandırır. Nöqtəvi işləyir.
killall Müəyyən ada malik bütün prosesləri dayandırır. Kütləvi bağlamaq üçün rahatdır.
pkill Prosesləri adı və ya şablonuna görə dayandırır. İstifadəçi adı kimi əlavə parametrləri dəstəkləyir.

5. Praktika: prosesləri dayandırırıq

İndi isə öyrəndiklərimizdən istifadə edərək bir az praktika edək. Əvvəlcə bir neçə uzunmüddətli proses işə salırıq:

sleep 300 &
sleep 400 &
sleep 500 &

Bu komandalar fərqli gözləmə zamanları olan üç fon prosesi yaradacaq. İndi isə kill, killallpkill komandaları ilə işləyə bilərsiniz.

  1. Bütün işləyən sleep proseslərini ps komandası ilə baxın:
ps aux | grep sleep

Hər bir prosesin PID-ni görəcəksiniz.

  1. PID, məsələn, 1234 olan prosesi dayandırın:
kill 1234
  1. Bütün sleep proseslərini eyni anda dayandırın:
killall sleep
  1. Bir neçə sleep prosesi daha işə salın və onları pkill vasitəsilə dayandırın:
pkill sl

6. Tipik səhvlər və vacib məqamlar

Əgər hüququnuz olmadığı bir prosesi (məsələn, başqa istifadəçinin prosesi) sonlandırmağa çalışırsınızsa, komanda səhv çıxaracaq. Bunun üçün superistifadəçi (sudo) hüquqlarına malik olmalısınız. Məsələn:

sudo kill 1234

Başqa bir qarışıqlıq mənbəyi çox aqressiv siqnallardan -9 istifadə ola bilər. Bu, kompüterin elektrikdən çıxarılmasına bərabərdir: sistem resursları boşaltmağa və ya məlumatları saxlamağa vaxt tapmayacaq. SIGKILL-dən yalnız ən son çarə kimi istifadə edin.

Serveri idarə edirsinizsə, xüsusilə killallpkill ilə ehtiyatlı olun. Prosesləri "kor-koranə" sonlandırmaq vacib məlumatların itirilməsinə səbəb ola bilər.


Niyə proseslərin sonlandırılması üçün komandaları bilmək vacibdir?

Bu komandaların tətbiq sahəsi genişdir, donmuş tətbiqlərin məhvidən tutmuş server proseslərinin idarə edilməsinə qədər. İş görüşməsində killpkill bilikləri sistemlərin administrasiyası və ya backend ilə işləmə haqqında sizin bacarığınızın vacib göstəricisi ola bilər.

Bu biliklərdən avtomatik olaraq idarə edilməyən prosesləri bağlayan və ya istifadə edilən portları boşaldan skriptlər yaratmaq üçün istifadə edin. Məsələn, 8080 portunu tutmuş serveri işə salmadan əvvəl bu komandadan istifadə edə bilərsiniz:

pkill -f "port 8080"

Bu komandaların çevikliyi və gücü Linux mütəxəssisi üçün əvəzolunmaz alətlər edir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION