我的僵尸进程(示例中的 PID 为 5693)如何能够占用 TCP 端口等资源(示例中的端口为 21050,但在我实际的情况下,它占用了更多资源,如 pty 和其他文件描述符)?我如何在不重启的情况下释放 TCP 端口?我甚至不明白进程如何会处于这种状态(我的意思是,既是僵尸进程又仍然占用资源)。
[root@mycomputer ~]# ps -fe | grep 5693
user 5693 1 0 Apr03 ? 00:01:12 [myproc] <defunct>
user 5835 5693 0 Apr03 ? 00:00:00 [mysubproc] <defunct>
root 58888 58050 0 17:39 pts/1 00:00:00 grep 5693
[root@mycomputer ~]# lsof | grep 21050
Systemtas 5693 user 15u IPv4 3853742 0t0 TCP *:21050 (LISTEN)
[root@mycomputer ~]#
答案1
A僵尸进程是系统进程表中的虚拟条目,只等待其父进程请求并接收其消亡的消息。它只能短暂地占用资源,直到系统释放所有资源。
然而,TCP 有一个问题:这可能需要几分钟的时间,在此期间 TCP 端口保持活动状态,以便另一端的进程能够接收到已停止的进程发送的任何最后数据。
这个等待时间通常是操作系统中可修改的参数。