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.

Olga Naumova