Gyakorlat – nem megfelelő folyamat leállítása
A számítógépek nem tökéletesek. Előbb vagy utóbb valami hiba történni fog. Ezért van rendszergazdaként feladata; Öntől függ a rendszerproblémák hibaelhárítása és javítása.
Képzelje el, hogy egy Python-alkalmazás problémákat okoz. Lehet, hogy túl sok CPU-időt vesz igénybe, vagy már nem válaszol. Mindkét esetben le szeretné állítani az alkalmazást. Egy folyamat vagy alkalmazás azonosítására használhatja a ps
parancsot és a grep
programot. Ezután a leállításához használhatja a kill
parancsot. Gyakorolja ezt a Linux rendszerű virtuális gépén.
Nem megfelelő folyamat elindítása
Ha le szeretne állítani egy folyamatot, szüksége lesz egy folyamatra, amit leállíthat. Hozzon létre egyet.
A következő parancs beírásával térjen vissza a home könyvtárba:
cd ~
Az Azure Cloud Shell panelen írja be a következő parancsot a Linux
vi
szerkesztőjének elindításához:vi bad.py
A
vi
egy széles körben használt szövegszerkesztő, amelyet a Linux a UNIX-tól örökölt. Függetlenül attól, hogy szereti vagy utálja, a Bash-felhasználónak ismernie kell avi
alapjait.Nyomja le az i billentyűt a
vi
beszúrási módra váltásához. Majd írja be a következő Python-programot:i = 0 while i == 0: pass
Ez a program a végrehajtás során végtelen hurokban fut – ami egyértelműen nem olyasvalami, amit a kiszolgálón futtatni szeretne.
Nyomja le az Esc billentyűt a beszúrási módból való kilépéshez. Ezután írja be a következő parancsot, és nyomja le az Enter billentyűt a program mentéséhez és a
vi
-ből való kilépéshez::wq
Ügyeljen arra, hogy a parancs elején szerepeljen a kettőspont. Ami a parancs hátralévő részét illeti a
w
a „write” (írás), aq
pedig a „quit” (kilépés) rövidítése.Most használja a következő parancsot a program elindítására és a háttérben való futtatására:
python3 bad.py &
Ügyeljen arra, hogy a parancs végén szerepeljen az és szimbólum (
&
). Ellenkező esetben nem jut vissza a Bash-parancssorba. A Bash-ben az és szimbólum egy parancsot futtat, és visszatér a parancssorba, akkor is, ha a parancs még nem fejezte be a futását.
Nem nyilvánvaló, de a bad.py már fut a háttérben, és ellopja a CPU-ciklusokat más folyamatoktól. Vessünk egy közelebbi pillantást arra, mi történik.
Folyamat leállítása
Egy folyamat leállításához szüksége van a folyamat nevére vagy azonosítójára. Ez a ps
feladata.
A memória frissítéséhez a
ps -ef
parancs felsorolja az összes futó folyamatot, és nagy mennyiségű információt jelenít meg mindegyikről. Használja az alábbi parancsot az összes futó folyamat listázásához és az eredményeknek a „python” kifejezést tartalmazó sorokra szűréséhez:ps -ef | grep python
A szabályoknak a következőhöz hasonlónak kell lenniük:
yourname+ 342 254 99 23:34 pts/1 00:00:31 python3 bad.py yourname+ 344 254 0 23:35 pts/1 00:00:00 grep --color=auto python
A felsorolásból kiderül, hogy a bad.py a kiszolgáló CPU-kihasználtságának 99 százalékát veszi igénybe. A program megfelel a saját nevének.
A
kill
parancs a folyamat azonosítója alapján leállítja a futó folyamatot. (A kapcsolódó parancs nevekillall
a folyamat neve alapján öl meg egy folyamatot.) Híváskorkill
el kell döntenie, hogy milyen típusú "jelet" használjon a folyamat befejezéséhez. A jeltípusok listáját a következő paranccsal jelenítheti meg:kill -l
Ha egy démonfolyamatot – vagyis a háttérben futó és az operációs rendszer részére létfontosságú szolgáltatásokat nyújtó – folyamatot állít le, a leállítása után, lehet, hogy azonnal újra szeretné indítani. Ehhez használhatja a
SIGHUP
jelet.Ebben a példában a folyamat újraindítása nélkül szeretné leállítani a folyamatot. Ezért a
SIGKILL
jelet kell használnia, amely a 9-es számnak felel meg. Ebből a célból ragadja meg bad.pya folyamatazonosítóját aps -ef
kimenetből (ez a második oszlopban található), és a következő paranccsal szakítsa meg a folyamatot. Cserélje le aPROCESS_ID
t a folyamat azonosítójával.kill -9 PROCESS_ID
Ugyanez a parancs
kill -s SIGKILL PROCESS_ID
formában is megadható. Önön múlik, hogy a jel nevét vagy számát használja.Fejezze be a
ps
újbóli futtatásával annak megerősítéséhez, hogy a bad.py már nem fut.
A ps
és a kill
használatának másik gyakori módja a „zombi folyamatoknak”, vagyis a gyengén megírt programok által hátrahagyott gyermekfolyamatoknak az azonosítása és leállítása.