Saya dulu bekerja dengan sistem HP-UX dan admin lama mengatakan kepada saya ada batas atas jumlah proses zombie yang dapat Anda miliki di sistem, saya percaya 1024.
- Apakah ini fakta yang sulit? Saya pikir Anda bisa memiliki sejumlah zombie sama seperti jika Anda dapat memiliki sejumlah proses ...?
- Apakah nilainya berbeda dari distro ke distro?
- Apa yang terjadi jika kita mencapai batas atas dan mencoba membuat zombie lain?
ulimit -u
. Saya bingung untuk sementara waktu karenaman ulimit
memberi saya rutin C tanpa menyebutkan-u
. Ulimit yang disebutkan sebenarnya adalah alat bash bawaan dan dijelaskan dalam halaman manual bash.Jawaban:
Saya tidak memiliki HP-UX yang tersedia untuk saya, dan saya tidak pernah menjadi penggemar HP-UX yang besar.
Tampaknya di Linux, batas per proses atau mungkin per pengguna pada berapa banyak proses anak ada. Anda dapat melihatnya dengan
limit
Zsh built-in (tampaknya analog denganulimit -u
bash):Itu ada di laptop Arch linux.
Saya menulis sebuah program kecil untuk menguji batas itu:
Secara mengejutkan sulit untuk "mengumpulkan" semua zombie dengan memanggil
wait(2)
waktu yang cukup. Juga, jumlah sinyal SIGCHLD yang diterima tidak pernah sama dengan jumlah proses anak bercabang: Saya percaya kernel linux kadang-kadang mengirimkan 1 SIGCHLD untuk sejumlah proses anak yang sudah keluar.Bagaimanapun, pada laptop Arch linux saya, saya mendapatkan proses anak 16088 bercabang, dan itu harus menjadi jumlah zombie, karena program tidak melakukan
wait(2)
panggilan sistem dalam penangan sinyal.Di server Slackware 12 saya, saya mendapatkan 6076 proses anak, yang sangat cocok dengan nilai
maxproc 6079
. ID pengguna saya memiliki 2 proses lain yang berjalan,sshd
dan Zsh. Seiring dengan contoh pertama, non-zombie dari program di atas yang membuat 6079.The
fork(2)
system call gagal dengan "Resource sementara tidak tersedia" kesalahan. Saya tidak melihat bukti lain dari sumber daya apa yang tidak tersedia. Saya mendapatkan angka yang agak berbeda jika saya menjalankan program saya secara bersamaan dalam 2 xterms berbeda, tetapi mereka menambahkan ke nomor yang sama seperti jika saya menjalankannya dalam satu xterm. Saya menganggap itu entri tabel proses, atau swap atau sumber daya seluruh sistem, dan bukan hanya batas yang sewenang-wenang.Saya tidak punya hal lain yang berjalan untuk mencobanya sekarang.
sumber
Saya tidak tahu apa batas HP-UX itu. Namun saya dapat memberitahu Anda bahwa implementasi logis adalah memiliki tabel proses dengan ukuran maksimum. Jumlah total entri tabel proses secara teoritis dibatasi oleh rentang ID proses, tetapi sebagian besar implementasi memiliki batas ukuran untuk tabel yang menghasilkan maksimum jauh lebih kecil. Sebagian besar varian unix memiliki batas per pengguna pada jumlah proses juga; Anda dapat melihat batasnya dengan menjalankan
ulimit -u
bash.Saya tidak berharap sistem unix memiliki batasan terpisah pada zombie, bukan pada jumlah ID proses (yang mencakup proses aktual dan juga zombie). Jadi ketika sebuah proses mati dan menjadi zombie, itu tidak mempengaruhi batas: sumber daya (entri dalam tabel proses) dialokasikan ketika suatu proses bercabang dan dibebaskan ketika proses itu menuai.
sumber
Saya pikir Anda bisa memiliki sejumlah zombie sama seperti jika Anda dapat memiliki sejumlah proses ...?
Proses zombie akhirnya merupakan proses - dalam keadaan khusus - maka proses zombie terbatas pada ketersediaan dan ukuran tabel proses, seperti untuk proses reguler .
Apakah nilainya berbeda dari distro ke distro?
Tentunya banyak parameter lainnya. Anda tidak boleh menyampaikan pada ukuran tertentu, atau jika itu cukup besar untuk menampung banyak proses zombie. Jika Anda mendapatkan terlalu banyak zombie solusinya bukan meja besar, karena akhirnya akan menjadi penuh. Proses zombie tidak buruk dengan sendirinya, tetapi memiliki terlalu banyak proses zombie yang terakumulasi merupakan indikasi program "berperilaku buruk" yang memungkinkan proses zombie tersebut.
Apa yang terjadi jika kita mencapai batas atas dan mencoba membuat zombie lain?
Setelah tabel proses penuh -dari proses reguler dan zombie-, tidak ada proses -rutin baru yang dapat dibuat, bahkan jika sistem memiliki cukup sumber daya-memori, prosesor, dll-. Satu-satunya sumber daya yang kurang hanyalah satu entri dalam tabel proses. Sudah menjalankan program - bahkan "berperilaku baik" - akan mulai gagal ketika mereka perlu membuat sub-proses. Program-program baru tidak dapat dimulai, dan bahkan menjalankan perintah tunggal akan gagal.
sumber
Even running single commands would fail.
-> itu dampak besar.