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
, killall
və pkill
. 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 killall
və pkill
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
, killall
və pkill
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
, killall
və pkill
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
, killall
və pkill
komandaları ilə işləyə bilərsiniz.
- Bütün işləyən
sleep
proseslərinips
komandası ilə baxın:
ps aux | grep sleep
Hər bir prosesin PID-ni görəcəksiniz.
- PID, məsələn, 1234 olan prosesi dayandırın:
kill 1234
- Bütün
sleep
proseslərini eyni anda dayandırın:
killall sleep
- 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ə killall
və pkill
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ə kill
və pkill
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.
GO TO FULL VERSION