Minden, amit a Linux folyamatairól tudni kell [Átfogó útmutató]
Ebben a cikkben a folyamatok alapvető megértését mutatjuk be, és röviden áttekintjük, hogyan lehet folyamatokat kezelni Linuxban bizonyos parancsok használatával.
A folyamat egy futó programra utal; ez egy program futó példánya. Ez a program utasításaiból, fájlokból, más programokból vagy a rendszerfelhasználótól származó bemeneti adatokból áll.
A folyamatok típusai
A Linuxban alapvetően kétféle folyamat létezik:
- Előtérbeli folyamatok (interaktív folyamatoknak is nevezik) – ezek inicializálása és vezérlése terminálmunkameneten keresztül történik. Más szóval, az ilyen folyamatok elindításához egy felhasználónak kell csatlakoznia a rendszerhez; nem indultak el automatikusan a rendszerfunkciók/szolgáltatások részeként.
- Háttérfolyamatok (más néven nem interaktív/automatikus folyamatok) – olyan folyamatok, amelyek nem csatlakoznak terminálhoz; nem várnak el semmilyen felhasználói beavatkozást.
Mi az a Daemons
Ezek a háttérfolyamatok speciális típusai, amelyek a rendszer indításakor indulnak el, és szolgáltatásként folyamatosan futnak; nem halnak meg. Rendszerfeladatokként indulnak el (szolgáltatásként futnak), spontán módon. Ezeket azonban a felhasználó vezérelheti az init folyamaton keresztül.
Folyamat létrehozása Linuxban
Egy új folyamat általában akkor jön létre, amikor egy meglévő folyamat pontos másolatot készít magáról a memóriában. Az utódfolyamat környezete megegyezik a szülővel, de csak a folyamat azonosító száma különbözik.
Két hagyományos módszer létezik egy új folyamat létrehozására Linuxban:
- A System() függvény használata – ez a módszer viszonylag egyszerű, azonban nem hatékony, és jelentős biztonsági kockázatokkal jár.
- A fork() és az exec() függvény használata – ez a technika kissé fejlett, de nagyobb rugalmasságot, sebességet és biztonságot kínál.
Hogyan azonosítja a Linux a folyamatokat?
Mivel a Linux egy többfelhasználós rendszer, ami azt jelenti, hogy különböző felhasználók különböző programokat futtathatnak a rendszeren, a program minden futó példányát egyedileg kell azonosítania a kernelnek.
A programot a folyamatazonosítója (PID), valamint a szülőfolyamatok azonosítója (PPID) azonosítja, ezért a folyamatok további kategóriákba sorolhatók:
- Szülőfolyamatok – ezek olyan folyamatok, amelyek futás közben más folyamatokat hoznak létre.
- Alárendelt folyamatok – ezeket a folyamatokat más folyamatok hozzák létre futás közben.
Az Init folyamat
Az Init folyamat a rendszer összes folyamatának anyja (szülője), ez az első program, amely a Linux rendszer indításakor fut le; ez kezeli a rendszer összes többi folyamatát. Maga a kernel indítja el, így elvileg nincs szülőfolyamata.
Az init folyamat folyamatazonosítója mindig 1. Örökbefogadóként működik minden árva folyamatnál.
A pidof paranccsal megkeresheti egy folyamat azonosítóját:
pidof systemd
pidof top
pidof httpd
Az aktuális shell folyamatazonosítójának és szülőfolyamat-azonosítójának megkereséséhez futtassa:
echo $$
echo $PPID
Folyamat indítása Linuxban
Miután futtatott egy parancsot vagy programot (például a cloudcmd – CloudCommander), az elindít egy folyamatot a rendszerben. Egy előtérben lévő (interaktív) folyamatot a következőképpen indíthat el, az csatlakozik a terminálhoz, és a felhasználó elküldheti a bemenetet:
cloudcmd
Linux háttérmunkák
Egy folyamat háttérben történő indításához (nem interaktív) használja a &
szimbólumot, itt a folyamat nem olvassa be a felhasználó bemenetét, amíg az előtérbe nem kerül.
cloudcmd &
jobs
A folyamatot a háttérbe is küldheti a [Ctrl + Z]
használatával felfüggesztve, ez a SIGSTOP jelet küldi a folyamatnak, így leállítja annak működését; tétlenné válik:
tar -cf backup.tar /backups/* #press Ctrl+Z
jobs
Ha továbbra is futni szeretné a fent felfüggesztett parancsot a háttérben, használja a bg parancsot:
bg
Ha háttérfolyamatot szeretne az előtérbe küldeni, használja az fg parancsot a feladatazonosítóval együtt, így:
jobs
fg %1
A következőket is kedvelheti: Hogyan indítsa el a Linux parancsot a háttérben és a folyamat leválasztását a terminálban
Egy folyamat állapotai Linuxban
A végrehajtás során egy folyamat egyik állapotból a másikba változik a környezetétől/körülményeitől függően. Linuxban egy folyamatnak a következő lehetséges állapotai vannak:
- Futás – itt vagy fut (ez az aktuális folyamat a rendszerben), vagy készen áll a futtatásra (az egyik CPU-hoz való hozzárendelésre vár).
- Várakozás – ebben az állapotban egy folyamat esemény bekövetkezésére vagy rendszererőforrásra vár. Ezenkívül a kernel kétféle várakozási folyamat között is különbséget tesz; a megszakítható várakozási folyamatok – megszakíthatók jelzésekkel és megszakíthatatlan várakozási folyamatok – közvetlenül hardveres feltételek mellett várakoznak, és semmilyen esemény/jel nem szakíthatja meg.
- Leállítva – ebben az állapotban egy folyamat leállt, általában jel vételével. Például egy folyamat, amely hibakeresés alatt áll.
- Zombi – itt egy folyamat halott, leállították, de még mindig van bejegyzése a folyamattáblázatban.
Az aktív folyamatok megtekintése Linuxban
Számos Linux-eszköz létezik a rendszeren futó folyamatok megtekintéséhez/listázásához, a két hagyományos és jól ismert a ps és a top parancs:
1. ps Parancs
Információkat jelenít meg a rendszer aktív folyamatairól, az alábbiak szerint:
ps
ps -e | head
2. lap tetejére – Rendszerfigyelő eszköz
A top egy hatékony eszköz, amely dinamikus, valós idejű nézetet kínál a futó rendszerről, ahogy az alábbi képernyőképen is látható:
top
Olvassa el ezt a további legnépszerűbb használati példákért: 12 TOP parancspélda Linuxban
3. pillantások – Rendszerfigyelő eszköz
A glances egy viszonylag új rendszerfigyelő eszköz fejlett funkciókkal:
glances
Átfogó használati útmutatóért olvassa el a következőt: Glances – Advanced Real Time System Monitoring Tool for Linux
Számos más hasznos Linux rendszerfigyelő eszköz is használható az aktív folyamatok listázására. Nyissa meg az alábbi linket, ha többet szeretne megtudni róluk:
- 20 parancssori eszköz a Linux teljesítményének figyelésére
- 13 További hasznos Linux megfigyelő eszközök
A folyamatok vezérlése Linux alatt
A Linuxnak is van néhány parancsa a folyamatok vezérlésére, például kill, pkill, pgrep és killall, az alábbiakban néhány alapvető példa ezek használatára:
pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances
A parancsok alapos használatának, az aktív folyamatok leállításának/leállításának a Linuxban való megismeréséhez nyissa meg az alábbi hivatkozásokat:
- Útmutató a Kill, Pkill és Killall parancsokhoz a Linux folyamatok leállításához
- Futó folyamatok keresése és leállítása Linuxban
Ne feledje, hogy ezek segítségével megsemmisítheti a nem reagáló Linux alkalmazásokat, amikor a rendszer lefagy.
Jelek küldése a folyamatokba
A folyamatok irányításának alapvető módja a Linuxban az, hogy jeleket küldünk nekik. Számos jelet küldhet egy folyamatnak, hogy megtekinthesse az összes futott jelet:
kill -l
Ha jelet szeretne küldeni egy folyamatnak, használja a kill, pkill vagy pgrep parancsokat, amelyeket korábban említettünk. De a programok csak akkor tudnak reagálni a jelekre, ha úgy vannak programozva, hogy felismerjék ezeket a jeleket.
És a legtöbb jel a rendszer belső használatra szolgál, vagy a programozóknak, amikor kódot írnak. A rendszerfelhasználó számára hasznos jelzések a következők:
- SIGHUP 1 – elküldi egy folyamatnak, amikor a vezérlő terminál zárva van.
- SIGINT 2 – a vezérlő terminál elküldi a folyamatnak, amikor a felhasználó megszakítja a folyamatot a
[Ctrl+C]
billentyűkombinációval. - SIGQUIT 3 – elküldi egy folyamatnak, ha a felhasználó kilépési jelet küld
[Ctrl+D]
. - SIGKILL 9 – ez a jel azonnal leállítja (leállítja) a folyamatot, és a folyamat nem hajt végre semmilyen tisztítási műveletet.
- SIGTERM 15 – ez egy programlezáró jel (a kill alapértelmezés szerint ezt küldi).
- SIGTSTP 20 – a vezérlő terminál elküldi egy folyamatnak, hogy leállítást kérjen (terminálleállás); a felhasználó által kezdeményezett
[Ctrl+Z]
lenyomásával.
Az alábbiakban példák a kill parancsokra, amelyek leállítják a Firefox alkalmazást a PID használatával, miután lefagy:
pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687
Ha egy alkalmazást a nevével szeretne megölni, használja a pkill vagy killall parancsot, például:
pkill firefox
killall firefox
A Linux folyamatprioritás módosítása
A Linux rendszeren minden aktív folyamatnak van prioritása és bizonyos szép értéke. A magasabb prioritású folyamatok általában több CPU-időt kapnak, mint az alacsonyabb prioritású folyamatok.
A root jogosultságokkal rendelkező rendszerfelhasználó azonban befolyásolhatja ezt a nice és a renice parancsokkal.
A top parancs kimenetéből az NI a folyamat szép értékét mutatja:
top
A nice paranccsal állítson be szép értéket egy folyamathoz. Ne feledje, hogy a normál felhasználók nullától 20-ig szép értéket rendelhetnek a tulajdonukban lévő folyamatokhoz.
Csak a root felhasználó használhat negatív szép értékeket.
Egy folyamat prioritásának renicezéséhez használja a renice parancsot az alábbiak szerint:
renice +8 2687
renice +8 2103
Tekintse meg néhány hasznos cikkünket a Linux-folyamatok kezeléséről és vezérléséről.
- Linux-folyamatkezelés: rendszerindítás, leállítás és minden ami között van
- Keresse meg a 15 legnépszerűbb folyamatot memóriahasználat szerint a „top” funkcióval kötegelt módban
- Keresse meg a legjobban futó folyamatokat a Linux legnagyobb memória- és processzorhasználata alapján
- Folyamatnév megkeresése PID-szám használatával Linuxban
Ez minden most! Ha bármilyen kérdése vagy további ötlete van, ossza meg velünk az alábbi visszajelzési űrlapon keresztül.