У меня есть несколько процессов, зависших от состояний непрерывного сна, и все они, по-видимому, связаны с auplink /var/lib/docker/aufs/mnt
. Это связано с докером, и он ждет ввода-вывода, который никогда не завершится - я понимаю, но как определить точную причину? Как я могу узнать, какой ввод-вывод он ждет? Кроме того, действительно ли нет способа заставить эти застрявшие процессы уйти без жесткой перезагрузки?
Вы можете увидеть стек процесса:
cat /proc/<process pid>/stack
который предоставит вам информацию о том, что он делал, когда оказался в состоянии D.
echo w > /proc/sysrq-trigger; dmesg
скажет ядру сообщать обо всех трассировках стека для процессов D-состояния в буфере dmesg.
Процессы в D-состоянии нельзя убить. Бывают ситуации, когда процесс остается в D-состоянии в течение длительного времени, но иногда завершает ввод-вывод и может быть прерван на короткий период времени, а затем возвращается к той же операции ввода-вывода и снова попадает в D-состояние. Затем с
while (true); do kill -9 PID; done
есть небольшая вероятность доставки сигнала KILL, пока процесс прерывается.