Это в системе Linux (дистрибутив Red Hat).
У меня есть демон, реализованный на Perl.Он следит за таблицей заданий и, когда находит новое, заставляет дочернего элемента выполнить задание.
Я обнаружил, что дети непрерывно слоняются в таблице процессов в непрерывном состоянии:
682 16658 100 dumpdeco dumpdeco ? 0:27.62 0.0 1.8 D perl /root/runObjectBrowserJobs.pl
1453 16658 100 dumpdeco dumpdeco ? 0:13.34 0.0 1.5 D perl /root/runObjectBrowserJobs.pl
1458 16658 100 dumpdeco dumpdeco ? 0:12.42 0.0 1.5 D perl /root/runObjectBrowserJobs.pl
1467 16658 100 dumpdeco dumpdeco ? 0:13.35 2.9 1.8 D perl /root/runObjectBrowserJobs.pl
1474 16658 100 dumpdeco dumpdeco ? 0:14.31 0.0 2.1 D perl /root/runObjectBrowserJobs.pl
1479 16658 100 dumpdeco dumpdeco ? 0:13.73 0.0 2.1 D perl /root/runObjectBrowserJobs.pl
1496 16658 100 dumpdeco dumpdeco ? 0:13.97 0.0 2.0 D perl /root/runObjectBrowserJobs.pl
1499 16658 100 dumpdeco dumpdeco ? 0:13.93 0.0 2.2 D perl /root/runObjectBrowserJobs.pl
1501 16658 100 dumpdeco dumpdeco ? 0:14.47 0.0 1.4 D perl /root/runObjectBrowserJobs.pl
1503 16658 100 dumpdeco dumpdeco ? 0:14.86 2.0 2.2 D perl /root/runObjectBrowserJobs.pl
1505 16658 100 dumpdeco dumpdeco ? 0:13.88 1.0 2.0 D perl /root/runObjectBrowserJobs.pl
1520 16658 100 dumpdeco dumpdeco ? 0:14.39 0.0 1.5 D perl /root/runObjectBrowserJobs.pl
1522 16658 100 dumpdeco dumpdeco ? 0:14.12 1.0 1.8 D perl /root/runObjectBrowserJobs.pl
1531 16658 100 dumpdeco dumpdeco ? 0:16.45 0.0 1.7 D perl /root/runObjectBrowserJobs.pl
3619 16658 100 dumpdeco dumpdeco ? 2:03.59 0.0 4.5 D perl /root/runObjectBrowserJobs.pl
Из своего журнала я знаю, что дети выполнили задание, которое им было поручено.Они зарегистрировали это, и работа была удалена из очереди ожидания.Таким образом, после проверки кода у них не осталось ничего, кроме выхода.
Кажется, это новое явление.Это старый кусок кода, и я танцевал процессы зомби, так что я почти уверен, что это не проблема с неправильным пожатием.
То, что я пытаюсь выяснить, этокак узнать, на чем держатся эти процессы.Я пробовал strace
, но ничего не возвращается.Честно говоря, это не удивительно, потому что процесс (по-моему) на самом деле не делает ничего, кроме сна, в ожидании возвращения какого-то системного вызова.
Итак, я 'Я думаю:
- Есть ли способ напечатать текущий стек вызовов запущенного процесса?
- Есть ли способ вывести процесс и просмотреть его стек во времясвалка?
- Есть предложения относительно того, что я должен искать?Я думаю, что сломанный драйвер хранилища (у нас были другие проблемы с нашим хранилищем в последнее время), но обвинять драйверы всегда кажется мне ленивым вариантом.