Halloween di Linux: cara membunuh proses zombie

setem halloween

Hari orang mati akan datang dan itulah sebabnya kami ingin melakukan tutorial kecil ini dari LxA untuk membincangkan mengenai proses zombie dan bagaimana kita boleh membunuh mereka. Perkara pertama yang perlu diperkatakan ialah proses zombie, dan seperti yang anda ketahui, kernel Linux mempunyai subsistem untuk menguruskan proses dan bekerja dengan penjadual untuk membuat, mengubah keutamaan, menghantar atau membuang aliran pemprosesan CPU dan proses membunuh. Nah, bahagian kernel ini, seperti sistem seperti Unix yang lain, membezakan antara pelbagai keadaan proses ...

Oleh itu, kita dapat menjumpainya satu proses ia boleh dalam keadaan tidur (S), iaitu tidur. Juga proses dalam keadaan berjalan (R) yang sedang berjalan atau berjalan, proses menunggu (D) yang dihentikan menunggu untuk dihadiri, isyarat (T) atau ditangguhkan, dan juga zombie (Z) atau si mati. Proses zombie atau mati adalah proses yang telah berjaya dihentikan, tetapi sumber daya sistem tertentu telah dirampas kerana Linux masih menyimpannya dalam jadual proses. Anda sudah tahu bahawa ketika proses berakhir, proses ini tidak seharusnya tetap dalam keadaan ini, tetapi prosesnya selesai dan kernel membebaskan sumber sehingga proses lain dapat menggunakannya, pada dasarnya ia membebaskan RAM yang ditempati ...

Oleh kerana tidak menarik untuk menjalani proses zombie jenis ini, walaupun tidak begitu kerap, kita dapat mencari dan menghilangkannya seperti yang ditunjukkan di sini. Perkara pertama adalah mencari apakah terdapat proses zombie di distro kami dan untuk itu kami dapat menolong diri sendiri alat seperti bahagian atas atau seperti ps. Sebagai contoh, salah satu daripada dua pilihan ini:

ps -el | grep 'Z'

ps aux | grep defunct

Dan setelah dikesan, kita boleh bunuh dia secara langsung dengan:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Walaupun alternatif lain adalah mencari proses induk, sejak membunuh proses zombie Anda harus membunuh proses induk yang mengekalkannya, seperti yang mungkin anda simpulkan:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Anda perlu menggantikan dengan ID proses zombie yang anda temukan dan untuk membunuhnya dengan kill, gunakan ID proses induk menggantikan dalam contoh, jelas.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab untuk data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   membuat bola kata

    Laman web yang baik!
    Mereka sentiasa mengeluarkan kita daripada masalah.

    Di mana mengatakan:
    Walaupun alternatif lain ialah mencari proses induk, kerana untuk membunuh proses zombi anda perlu membunuh proses induk yang menyokongnya, seperti yang anda mungkin telah simpulkan:

    1 | ps -eo pid, ppid | grep
    2|
    3 | bunuh -9

    Anda perlu menggantikan ID proses zombi yang telah anda temui dan untuk membunuhnya dengan membunuh, gunakan ID proses induk yang menggantikan dalam contoh, jelas.

    anda boleh menambah skrip:

    $ kucing killppid.sh
    #! / Bin / Bash
    bunuh -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    Sudah tentu, ia bukan tugas yang dilakukan oleh pengguna biasa sepanjang masa.
    Ia hanya berguna untuk pentadbir, tetapi berbahaya untuk menjalankannya sebagai root, kerana sebarang proses pada sistem boleh dibunuh.

    Dalam pembunuhan manusia ia mempunyai nota ini:

    NOTA Cangkang anda (jurubahasa baris perintah) mungkin mempunyai perintah bunuh terbina dalam. Anda boleh
    perlu menjalankan arahan yang diterangkan di sini sebagai / bin / kill untuk menyelesaikan konflik.

    Bash mempunyai perintah itu, ini adalah bahagian man bash mengenainya:

    bunuh [-s sigspec | -n tandatangan | -sigspec] [pid | jobspec] ...
    bunuh -l | -L [sigspec | exit_status]
    Hantar isyarat yang dinamakan oleh sigspec atau signum kepada proses yang dinamakan oleh pid atau kerja
    spek. sigspec ialah sama ada nama isyarat tidak peka huruf besar-besaran seperti SIGKILL (dengan atau
    tanpa awalan SIG) atau nombor isyarat; signum ialah nombor isyarat. Jika
    sigspec tidak hadir, maka SIGTERM diandaikan. Hujah -l menyenaraikan
    nama isyarat. Jika sebarang hujah dibekalkan apabila -l diberikan, nama bagi
    isyarat yang sepadan dengan hujah disenaraikan, dan status pulangan ialah 0.
    Argumen exit_status kepada -l ialah nombor yang menentukan sama ada nombor isyarat atau
    status keluar dari proses yang ditamatkan oleh isyarat. Pilihan -L adalah bersamaan
    dipinjamkan kepada -l. kill kembali benar jika sekurang-kurangnya satu isyarat berjaya dihantar, atau
    palsu jika ralat berlaku atau pilihan yang tidak sah ditemui.

    Pada mulanya mereka menerangkan bagaimana bash melindungi proses, untuk mengelakkan beberapa masalah, tetapi tidak jelas kepada saya bagaimana saya boleh membuat skrip selamat untuk dijalankan sebagai root.
    Satu-satunya perkara yang boleh saya fikirkan adalah untuk melindunginya seperti ini:

    $ kucing killppid.sh
    #! / Bin / Bash
    jika [$ PENGGUNA == "root"]
    kemudian echo Jangan jalankan $ 0 sebagai root !!! ia berbahaya!
    keluar
    fi

    bunuh -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    $

    Gunakan bash's kill, bukan / bin / kill

    Bagaimana anda boleh melihat saya tidak begitu mahir dalam bash.
    Adakah anda tahu cara menulis skrip selamat yang berjalan sebagai pengguna proses anak, walaupun ia berjalan sebagai root?
    sesuatu yang setara dengan apa yang akan dilakukan secara manual seperti ini:

    $ su;
    $ bunuh -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')