Очевидно, это заговор между программистами и производителями железа. Придуман для того чтоб заставить потребителей покупать более мощные процессоры и больше памяти.
возможно глючит какой-то девайс в компьютере, ОСь опрашивает каждую железку в отдельности, и вот если какая-то железка тупит и не отвечает, то все подвисает.
пример раз - криво написанная софтина ждет ответа по сети, а в соседнем подьезде бомжи как раз в это время коробку с лампочками сперли и пошли пропивать. висим, ждем. все блокируем. пример два - какой-нибудь дедлок в файловой системе (сам встречал в ZFS на FreeBSD 9). файл прочесть софтина хочет, да не может. вот и висит. пример три - набыдлокодили где-нибудь бесконечный цикл. да мало ли чего еще можно придумать =)
тот же сервер может создать впечатление зависшего, если у него исчерпались somaxconn, хотя хватает и процессора и памяти.
если программа работает с сетью или накопителем, то им достаточно как-нибудь нештатно отвалиться, чтобы программа перешла в D state и её было почти ничем не убить
помню, когда у меня хард умирал, разные процессы периодически валились в D state, бесило аж
Ну у тебя же не только память и CPU программа использует. Может на диск записать не получается, может внутри какое-то исключение получает которое не может обработать, может какая-нибудь функция не правильно вызывается, тысяча причин может быть, память и процессор из которых - самые простые.
Вопрос спорный. Если может «зависнуть» нормально отлаженная программа, то оси все в этом плане криво написаны. И недоотлаженные программы тоже есть, которые впадают в «бесконечный цикл» или в «ожидание какого-либо ответа».