Gyakorlat – nem megfelelő folyamat leállítása

Befejeződött

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.

  1. A következő parancs beírásával térjen vissza a home könyvtárba:

    cd ~
    
  2. 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 a vi alapjait.

  3. 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.

  4. 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), a q pedig a „quit” (kilépés) rövidítése.

  5. 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.

  1. 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
    
  2. 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 neve killall a folyamat neve alapján öl meg egy folyamatot.) Híváskor killel 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
    
  3. 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 a ps -ef kimenetből (ez a második oszlopban található), és a következő paranccsal szakítsa meg a folyamatot. Cserélje le a PROCESS_IDt 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.

  4. 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.