Kaip rasti ir nutraukti procesą Linux — ps, kill, pkill
Kad nutrauktumėte procesą Linux sistemoje, pirmiausia raskite jo PID (identifikatorių) komandomis ps arba pgrep, tada nusiųskite signalą per kill. Nutraukimui pagal vardą patogios pkill ir killall. Aptarsime iš eilės.
1 žingsnis. Raskite procesą
Parodyti visus procesus ir atfiltruoti pagal vardą su grep:
ps aux | grep nginx
Išvestyje antras stulpelis — PID. Tiesesnis būdas — pgrep, kuris iš karto grąžina identifikatorius:
pgrep -a nginx
Vėliavėlė -a rodo PID kartu su komandine eilute.
Jei procesas laiko tinklo prievadą, raskite jį pagal prievadą:
sudo ss -ltnp | grep :80
2 žingsnis. Nutraukite procesą pagal PID
Standartinė komanda — kill. Pagal numatymą ji siunčia signalą TERM (15) — mandagų prašymą baigti darbą, leidžiantį procesui išsaugoti duomenis:
kill 12345
Jei procesas nereaguoja, siųskite signalą KILL (9) — priverstinį nutraukimą be galimybės išsaugoti:
kill -9 12345
Pirmiausia visada bandykite įprastą kill, ir tik jei procesas pakibo — -9.
Nutraukimas pagal vardą: pkill ir killall
PID ieškoti nebūtina — procesą galima nutraukti pagal vardą.
pkill veikia pagal dalinį vardo atitikimą:
pkill nginx
pkill -9 nginx
killall nutraukia visus procesus su tiksliu vardu:
killall nginx
Būkite atsargūs: pkill php nutrauks visus procesus, kurių varde yra php.
Nutraukimas su htop
Grafinis būdas — per htop:
htop
Raskite procesą (klavišas F3 paieškai), pažymėkite jį rodyklėmis ir spauskite F9. Pasirinkite signalą (paprastai SIGTERM, tada SIGKILL) ir patvirtinkite.
Pagrindiniai signalai
| Signalas | Numeris | Veiksmas |
|---|---|---|
| SIGTERM | 15 | Švelnus nutraukimas (numatytasis) |
| SIGKILL | 9 | Priverstinis nutraukimas |
| SIGHUP | 1 | Perskaityti konfigūraciją / paleisti iš naujo |
| SIGINT | 2 | Pertraukimas (kaip Ctrl+C) |
Perkrauti tarnybos konfigūraciją jos nestabdant dažnai galima taip:
kill -HUP 12345
Sistemą apkraunančio proceso paieška
Rasti labiausiai CPU ėdantį procesą:
ps aux --sort=-%cpu | head
Pagal atmintį:
ps aux --sort=-%mem | head
Dažni klausimai
Kuo kill -15 skiriasi nuo kill -9?
-15 (TERM) prašo proceso baigti darbą korektiškai: uždaryti failus, išsaugoti duomenis. -9 (KILL) nužudo akimirksniu, procesas nespėja nieko išsaugoti. Pradėkite nuo -15.
Procesas nesibaigia net su -9. Ką daryti?
Taip nutinka su procesais būsenoje D (nepertraukiamas miegas, dažniausiai disko laukimas). Jų nutraukti negalima, kol nesibaigs įvesties–išvesties operacija; kartais padeda tik perkrovimas.
Kaip nutraukti procesą žinant tik prievadą?
Raskite PID per sudo ss -ltnp | grep :PRIEVADAS, tada kill PID. Arba viena komanda: sudo fuser -k 80/tcp.
Ar pavojinga naudoti killall?
Jis nutraukia visus procesus nurodytu vardu. Iš anksto patikrinkite sąrašą per pgrep -a vardas, kad nesustabdytumėte per daug.
Apibendrinimas
ps/pgrep paieškai ir kill/pkill nutraukimui padengia beveik visas procesų valdymo užduotis. Taisyklė paprasta: pirma švelnus TERM, ir tik pakibusiems — KILL.
Valdote savo serverį? Rinkitės Linux VPS, užsisakykite VPS nuomą arba Serverių administravimą, jei stebėseną patogiau patikėti specialistams.