僵尸进程如何像 TCP 端口一样持有系统资源?

Zol*_*jda 5 linux tcp process

我的僵尸进程(示例中的 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 ~]#
Run Code Online (Sandbox Code Playgroud)

har*_*ymc 2

僵尸进程是系统进程表中的一个虚拟条目,只等待其父进程请求并接收其死亡的消息。它只能短暂保留资源,直到系统完成释放所有资源。

然而,TCP 有一个问题:这可能需要几分钟的时间,在此期间 TCP 端口保持活动状态,以便另一端的进程能够接收已失效进程发送的任何最后数据。

该等待时间通常是操作系统中的可修改参数。

  • 僵尸可能被困在不间断的系统调用中,因此无法被终止。您可能会尝试关闭网络,希望它适用于此系统调用。否则,如果内核不会中止该调用,那么只有重新启动才能摆脱它。 (2认同)