Selamat Halloween Open SOURCE-rer!
Inilah kisah setua zaman waktu. Sejak ada C dan Unix, dan (kemudian) Linux, kami memiliki zombie . Secara khusus, ada proses yang ditandai sebagai proses zombie . Disalahpahami oleh beberapa orang, diabaikan oleh orang lain, dan kebal terhadap upaya banyak dari kita yang mencoba kill
proses ini tanpa banyak keberhasilan. Mengapa demikian?
Apa itu proses di Linux?
Semuanya dimulai ketika sebuah program di Linux dieksekusi, dan ketika itu terjadi, instance yang sedang berjalan disebut proses. Anda dapat melihat semua proses di lingkungan Linux dengan ps
perintah.
$ ps -ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
2 ? S 0:00 [kthreadd]
3 ? I< 0:00 [rcu_gp]
4 ? I< 0:00 [rcu_par_gp]
Terkadang sebuah proses memulai proses lain, menjadikan proses pertama sebagai induk dari proses kedua. pstree
command adalah alat hebat yang memungkinkan Anda melihat "silsilah" proses di sistem Anda.
$ pstree -psn
systemd(1)─┬─systemd-journal(952)
├─systemd-udevd(963)
├─systemd-oomd(1137)
├─systemd-resolve(1138)
├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
│ ├─systemd-userwor(12714)
│ └─systemd-userwor(12715)
├─auditd(1140)───{auditd}(1141)
├─dbus-broker-lau(1164)───dbus-broker(1165)
├─avahi-daemon(1166)───avahi-daemon(1196)
├─bluetoothd(1167)
Setiap proses diberi nomor dalam sistem. ID Proses nomor 1 ditetapkan ke proses pertama yang dijalankan selama proses boot, dan setiap proses berikutnya setelah PID 1 adalah turunannya. Proses PID 1 adalah init , yang pada sebagian besar versi Linux yang lebih baru hanyalah tautan simbolis ke systemd
program.
Lebih banyak sumber daya Linux
- Lembar contekan perintah Linux
- Lembar contekan perintah Linux tingkat lanjut
- Kursus online gratis:Ikhtisar Teknis RHEL
- Lembar contekan jaringan Linux
- Lembar contekan SELinux
- Lembar contekan perintah umum Linux
- Apa itu container Linux?
- Artikel Linux terbaru kami
Mengakhiri proses dengan perintah kill
Anda dapat menghentikan proses di sistem Linux dengan kill
perintah. Terlepas dari namanya, kill
perintah dan serangkaian perintah lainnya seperti pkill
dan killall
ditulis/dirancang untuk mengirim SINYAL ke satu atau lebih proses. Jika tidak ditentukan, SINYAL default yang dikirimkannya adalah sinyal SIGTERM untuk menghentikan proses.
Saat proses induk mati atau terbunuh, dan proses turunannya tidak mengikuti kematian induknya, kami menyebut proses tersebut sebagai proses yatim piatu .
Cara membunuh proses zombie
Proses zombie, di sisi lain, tidak bisa dibunuh! Mengapa mungkin Anda bertanya? Yah, karena mereka sudah mati!
Setiap proses anak, ketika dihentikan, menjadi proses zombie dan kemudian dihapus oleh induknya. Ketika proses keluar dari keberadaannya dan melepaskan sumber daya yang telah digunakannya, namanya masih ada di tabel proses OS. Kemudian tugas proses induk untuk menghapus namanya dari tabel proses. Ketika gagal, kita memiliki proses zombie, yang sebenarnya bukan proses lagi, tetapi hanya sebuah entri pada tabel proses OS.
Inilah sebabnya mengapa mencoba melakukan kill
perintah bahkan dengan -9
Opsi (SIGKILL) pada proses yang mati (zombie) tidak berfungsi, karena tidak ada yang perlu dimatikan.
Jadi, untuk mematikan proses zombie, seperti menghapus namanya dari daftar proses (tabel proses), Anda harus membunuh induknya. Misalnya, jika PID 5878 adalah proses zombie, dan induknya adalah PID 4809, maka untuk membunuh zombie (5878) Anda mengakhiri induk (4809):
$ sudo kill -9 4809 #4809 is the parent, not the zombie
Kata peringatan terakhir saya tentang zombie. Berhati-hatilah saat mematikan proses induk. Jika induk dari suatu proses adalah PID 1 dan Anda mematikannya, Anda akan me-reboot sendiri!
Dan itu akan menjadi cerita yang lebih menakutkan untuk diceritakan!