2013-10-23 77 views
0

我用下面的脚本来跟踪一个正在运行的僵尸进程:如何检查僵尸进程是否仍在侦听端口?

ps aux | awk '{ print $8 " " $2 }' | grep -w Z 

我也用nestat -tulpn | grep <regex>,检查一个特定端口是否处于忙碌状态。

我试图将第一个查询的输出传递给第二个,来检查僵尸进程是否正在侦听任何端口?可能吗?

+1

我以为当一个进程变成了一个“僵尸”时,所有分配给它的东西都被释放了。我认为僵尸只是进程表中的一个入口,等待被收割...... –

+0

您可以尝试使用'lsof'来查看带有开放(IPv4)套接字的任何进程:'lsof -i 4 -a'。 – DanielGibbs

+0

我认为Wu引用了连接处于等待关闭状态的情况,这种情况到底发生了什么。我想要清除正在运行的脚本的所有实例并释放实例正在使用的所有资源,以进行干净的重新启动。 – Sharktooth

回答

2

正如Brad Allred所评论的,僵尸进程不包含任何系统资源。它不能监听端口,保存文件描述符或用户空间内存。内核中只有极少量的信息,比如返回状态。

但是,TCP有一个问题,它与僵尸程序无关。如果连接处于等待关闭状态(可能需要几分钟),则新套接字无法在相同端口上侦听。即使持有前一个套接字的进程已经死机,也会发生这种情况。

+0

我认为你已经击中了这里。我想知道一个死进程是否让tcp端口保持忙碌状态?如果是的话,我将如何释放该端口,因为听它的进程已经死了? – Sharktooth

+0

您最好显示相关的ps/nestat条目。你看到任何FIN_WAIT1连接? –