这是在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
,但它没有返回任何内容。说实话,这并不奇怪,因为这个过程(我的猜测)并不是实际上做除了睡觉之外的其他事情,等待一些系统调用返回。
所以,我在想: