Halloween di Linux: cara membunuh proses zombie

perangko halloween

Hari kematian akan datang dan itulah mengapa kami ingin melakukan tutorial kecil ini dari LxA untuk berbicara tentang proses zombie dan bagaimana kita bisa membunuh mereka. Hal pertama yang harus dikatakan adalah apa proses zombie itu, dan seperti yang Anda ketahui, kernel Linux memiliki subsistem untuk mengelola proses dan bekerja dengan penjadwal untuk membuat, memvariasikan prioritas, mengirim atau menghapus aliran pemrosesan CPU dan mematikan proses.. Nah, bagian kernel ini, seperti sistem mirip Unix lainnya, membedakan antara berbagai status proses ...

Jadi kita bisa menemukannya sebuah proses bisa dalam keadaan tidur (S), yaitu tertidur. Juga proses dalam keadaan berjalan (R) yaitu yang sedang aktif atau berjalan, proses menunggu (D) yang berhenti menunggu untuk dihadiri, gestpt (T) atau ditangguhkan, dan juga zombie (Z) atau almarhum. Proses zombie atau mati adalah salah satu yang telah berhasil dihentikan, tetapi memiliki sumber daya sistem tertentu yang dibajak karena Linux masih menyimpannya dalam tabel proses. Anda sudah tahu bahwa ketika suatu proses berakhir, seharusnya tidak tetap dalam keadaan ini, tetapi selesai dan kernel membebaskan sumber daya sehingga proses lain dapat menggunakannya, pada dasarnya ini membebaskan RAM yang ditempati ...

Yah, karena tidak menarik untuk memiliki jenis proses zombie ini, meskipun tidak terlalu sering, kita dapat mencari dan menghilangkannya seperti yang ditunjukkan di sini. Hal pertama adalah menemukan apakah ada proses zombie di distro kami dan untuk itu kami dapat membantu diri kami sendiri alat seperti top atau seperti ps. Misalnya, salah satu dari dua opsi ini:

ps -el | grep 'Z'

ps aux | grep defunct

Dan begitu terdeteksi, kita bisa bunuh dia langsung dengan:

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

Meskipun alternatif lain adalah menemukan proses induk, sejak itu membunuh proses zombie Anda harus menghentikan proses induk yang menopangnya, seperti yang mungkin telah Anda simpulkan:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Anda harus mengganti dengan ID dari proses zombie yang telah Anda temukan dan untuk membunuhnya dengan membunuh, gunakan ID dari proses induk menggantikan dalam contoh, tentu saja.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Bertanggung jawab atas data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   membuat bola dijo

    Situs yang bagus!
    Mereka selalu membuat kita keluar dari masalah.

    Dimana mengatakan:
    Meskipun alternatif lain adalah menemukan proses induk, karena untuk mematikan proses zombie Anda harus mematikan proses induk yang mendukungnya, seperti yang mungkin telah Anda simpulkan:

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

    Anda harus mengganti ID proses zombie yang telah Anda temukan dan untuk membunuhnya dengan kill, gunakan ID proses induk yang menggantikan dalam contoh, jelas.

    Anda dapat menambahkan skrip:

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

    Tentu saja, ini bukan tugas yang dilakukan pengguna biasa sepanjang waktu.
    Ini hanya akan berguna bagi administrator, tetapi berbahaya untuk menjalankannya sebagai root, karena dapat mematikan proses apa pun di sistem.

    Dalam man kill memiliki catatan ini:

    CATATAN Shell Anda (penerjemah baris perintah) mungkin memiliki perintah kill bawaan. Kamu boleh
    perlu menjalankan perintah yang dijelaskan di sini sebagai / bin / kill untuk menyelesaikan konflik.

    Bash memiliki perintah itu, ini adalah bagian dari man bash tentangnya:

    bunuh [-s sigspec | -n tanda | -sigspec] [pid | spesifikasi pekerjaan] ...
    kill -l | -L [sigspec | status_keluar]
    Kirim sinyal yang diberi nama oleh sigspec atau signum ke proses yang diberi nama oleh pid atau job
    spesifikasi sigspec adalah nama sinyal case-insensitive seperti SIGKILL (dengan or
    tanpa awalan SIG) atau nomor sinyal; signum adalah nomor sinyal. Jika
    sigspec tidak ada, maka SIGTERM diasumsikan. Argumen -l mencantumkan
    nama sinyal. Jika ada argumen yang diberikan ketika -l diberikan, nama-nama dari
    sinyal yang sesuai dengan argumen terdaftar, dan status pengembaliannya adalah 0.
    Argumen exit_status ke -l adalah angka yang menentukan nomor sinyal atau
    status keluar dari proses yang dihentikan oleh sinyal. Opsi -L setara
    dipinjamkan ke -l. kill mengembalikan true jika setidaknya satu sinyal berhasil dikirim, atau
    false jika terjadi kesalahan atau ditemukan opsi yang tidak valid.

    Pada awalnya mereka menjelaskan bagaimana bash melindungi proses, untuk menghindari beberapa masalah, tetapi tidak jelas bagi saya bagaimana saya bisa membuat skrip yang aman untuk dijalankan sebagai root.
    Satu-satunya hal yang dapat saya pikirkan adalah melindunginya seperti ini:

    $ kucing killppid.sh
    #! / bin / bash
    jika [$ PENGGUNA == "root"]
    lalu echo Jangan jalankan $ 0 sebagai root !!! itu berbahaya!
    keluar
    fi

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

    $

    Gunakan bash's kill, bukan / bin / kill

    Bagaimana Anda bisa melihat saya tidak fasih dalam bash.
    Apakah Anda tahu cara menulis skrip aman yang berjalan sebagai pengguna proses anak, meskipun berjalan sebagai root?
    sesuatu yang setara dengan apa yang akan dilakukan secara manual seperti ini:

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