Jika Anda mencurigai kebuntuan, lakukan ps aux | grep <exe name>
, jika dalam output, PROCESS STATE CODE
adalah D
(Uninterruptible sleep) artinya kebuntuan. Karena seperti yang dijelaskan @daijo, katakanlah Anda memiliki dua utas T1
&T2
dan dua bagian penting masing-masing dilindungi oleh semaphores S1 & S2
lalu jika T1
memperoleh S1
dan T2
memperoleh S2
dan setelah itu mereka mencoba untuk mendapatkan kunci lain sebelum melepaskan kunci yang sudah mereka pegang, ini akan menyebabkan kebuntuan dan melakukan ps aux | grep <exe name>
, process state code
akan menjadi D
(yaitu tidur tanpa gangguan).
Alat:
Valgrind, Lockdep (utilitas kernel linux)
Periksa tautan ini tentang jenis kebuntuan dan cara menghindarinya :http://cmdlinelinux.blogspot.com/2014/01/linux-kernel-deadlocks-and-how-to-avoid.html
Edit:ps aux
keluaran D
"bisa" berarti proses menemui jalan buntu, dari dokumen redhat ini:
Kondisi Tidur Tanpa Gangguan
Kondisi tidur tanpa gangguan adalah kondisi yang tidak akan langsung menangani sinyal. Ini akan bangun hanya sebagai hasil dari sumber daya yang menunggu tersedia atau setelah waktu habis terjadi selama menunggu itu (jika waktu habis ditentukan saat proses dimatikan).
Saya sarankan Anda melihat Helgrind:pendeteksi kesalahan utas.
Contoh paling sederhana dari masalah tersebut adalah sebagai berikut.
Bayangkan beberapa sumber daya bersama R, yang, untuk alasan apa pun, dijaga oleh dua kunci, L1 dan L2, yang keduanya harus dipegang saat R diakses.
Misalkan sebuah utas memperoleh L1, lalu L2, dan melanjutkan untuk mengakses R. Implikasinya adalah bahwa semua utas dalam program harus memperoleh dua kunci dengan urutan pertama L1 kemudian L2. Tidak melakukannya berisiko mengalami kebuntuan.
Kebuntuan bisa terjadi jika dua utas - sebut saja T1 dan T2 - keduanya ingin mengakses R. Misalkan T1 memperoleh L1 terlebih dahulu, dan T2 memperoleh L2 terlebih dahulu. Kemudian T1 mencoba untuk mendapatkan L2, dan T2 mencoba untuk mendapatkan L1, tetapi kedua kunci tersebut sudah dipegang. Jadi T1 dan T2 menemui jalan buntu."