Untuk skenario pengujian bencana pada lingkungan server luar, kami sedang mencari cara mudah untuk membuat proses macet dalam keadaan D (tidur tidak terputus).
Ada cara mudah? Contoh kode sampel C akan menjadi nilai tambah :)
Sunting - jawaban pertama adalah semi-benar, karena prosesnya ditunjukkan dalam keadaan D, tetapi masih menerima sinyal dan dapat dibunuh
process
process-management
benchmark
er453r
sumber
sumber
Jawaban:
Saya memiliki masalah yang sama dan menyelesaikannya dengan membuat modul kernel yang macet dalam keadaan D.
Karena saya tidak memiliki pengalaman dalam modul, saya mengambil kode dari turorial ini dengan beberapa modifikasi yang ditemukan di tempat lain .
Hasilnya adalah perangkat di / dev / memory yang macet saat dibaca tetapi bisa terbangun dengan menulisnya (perlu dua tulisan, saya tidak tahu kenapa tapi saya tidak peduli).
Untuk menggunakannya:
Untuk membuka blokir, dari terminal lain:
Makefile:
Kode untuk memory.c:
sumber
Dari https://blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the
Suatu proses dimasukkan ke dalam tidur yang tidak terputus
(STAT D)
ketika perlu menunggu sesuatu (biasanya I / O) dan tidak boleh menangani sinyal saat menunggu. Ini berarti Anda tidak bisakill
, karena semua kill tidak mengirimkan sinyal. Ini mungkin terjadi di dunia nyata jika Anda mencabut server NFS Anda sementara mesin lain memiliki koneksi jaringan terbuka untuk itu.Kami dapat membuat proses kami sendiri yang tidak terputus dengan durasi terbatas dengan memanfaatkan
vfork
panggilan sistem.vfork
sepertifork
, kecuali ruang alamat tidak disalin dari orang tua ke anak, untuk mengantisipasiexec
yang hanya akan membuang data yang disalin. Mudah bagi kami, ketika Andavfork
orang tua menunggu tanpa gangguan (dengan carawait_on_completion
) pada anakexec
atauexit
:Kita melihat anak (
PID 1973, PPID 1972
) dalam tidur interruptible dan orang tua (PID 1972, PPID 13291
- shell) dalam tidur tidak terganggu sementara itu menunggu selama 60 detik pada anak.Satu hal yang rapi (nakal?) Tentang skrip ini adalah bahwa proses dalam tidur yang tidak terputus berkontribusi pada rata-rata beban mesin. Jadi, Anda dapat menjalankan skrip ini 100 kali untuk sementara waktu memberi mesin rata-rata beban meningkat sebesar 100, seperti yang dilaporkan oleh
uptime
.sumber
kill
: /Pada dasarnya kamu tidak bisa. Baca artikel ini, berjudul: TASK_KILLABLE: Keadaan proses baru di Linux .
kutipanT&J SO ini berjudul: Apa itu proses yang tidak terputus? juga menjelaskannya.
Saya menemukan ini dalam buku yang sangat menarik berjudul: The Linux Programming Interface: A Linux dan UNIX System Programming Handbook .
sumber
TASK_KILLABLE
negara baru .