GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit a zjistit, že je program v mrtvém bodě?

Pokud máte podezření na zablokování, proveďte ps aux | grep <exe name> , pokud je na výstupu, PROCESS STATE CODE je D (Nepřerušitelný spánek) znamená, že došlo k uváznutí. Protože, jak vysvětlil @daijo, řekněme, že máte dvě vlákna T1 &T2 a dvě kritické sekce, každá chráněná semaphores S1 & S2 pak pokud T1 získává S1 a T2 získává S2 a poté se pokusí získat druhý zámek, než se vzdají toho, který již mají, to povede k uváznutí a provedení ps aux | grep <exe name> , process state code bude D (tj. Nepřerušitelný spánek).

Nástroje:

Valgrind, Lockdep (utilita pro linuxové jádro)

Podívejte se na tento odkaz o typech uváznutí a o tom, jak se jim vyhnout:http://cmdlinelinux.blogspot.com/2014/01/linux-kernel-deadlocks-and-how-to-avoid.html

Upravit:ps aux výstup D "Mohl" znamená, že proces je v mrtvém bodě, z tohoto dokumentu redhat:

Stav nepřerušitelného spánku
Stav nepřerušitelného spánku je stav, který nezpracuje signál hned. Probudí se pouze v důsledku zpřístupnění vyčkávaného zdroje nebo po vypršení časového limitu během tohoto čekání (pokud je časový limit specifikován při uspání procesu).


Navrhoval bych, abyste se podívali na Helgrind:detektor chyb vláken.

Nejjednodušší příklad takového problému je následující.

Představte si nějaký sdílený zdroj R, který je z jakéhokoli důvodu střežen dvěma zámky, L1 a L2, které musí být oba drženy, když je přístup R.

Předpokládejme, že vlákno získá L1, pak L2 a pokračuje v přístupu k R. Důsledkem toho je, že všechna vlákna v programu musí získat dva zámky v pořadí nejprve L1 a pak L2. Pokud tak neučiníte, riskujete uváznutí.

K uváznutí může dojít, pokud dvě vlákna -- nazývají je T1 a T2 -- chtějí mít přístup R. Předpokládejme, že T1 získá nejprve L1 a T2 jako první získá L2. Potom se T1 pokusí získat L2 a T2 se pokusí získat L1, ale oba tyto zámky jsou již drženy. T1 a T2 se tak zablokují."


Linux
  1. Klient Maestral Dropbox, zjistěte, jak jej nainstalovat a používat

  2. Jak najít a zabít zombie proces v Linuxu

  3. Jak zjistím, zda moje bezdrátová karta podporuje 5 GHz?

  1. Jak zjistit nejlepší adresáře a soubory (místo na disku) v Linuxu

  2. Jak najít a odstranit duplicitní fotografie v Linuxu

  3. Jak zjistit zdroj signálu POSIX

  1. Jak vytisknout řádky číslo 15 a 25 z každých 50 řádků?

  2. Jak najdu soubory a součet jejich velikostí?

  3. Jak zjistit jmenný prostor konkrétního procesu?