编写unix网络通信程序时,经常会遗留一些状态为CLOSE_WAIT的进程,使用netstat 命令查看,结果中没有进程相关的信息:
netstat -a|grep 9877
tcp 1 0 ylei-laptop.local:53773 ylei-linux.local:9877 CLOSE_WAIT
tcp 1 0 ylei-laptop.local:54080 ylei-laptop.local:9877 CLOSE_WAIT
这时可这使用lsof工具,它可这显示出状态为CLOSE_WAIT的进程的程序名(command),进程id(pid), 等等。
lsof -i@ylei-laptop.local
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gvfsd-smb 2217 ylei 18u IPv4 41440 0t0 TCP ylei-laptop.local:60953->ylei-linux.local:netbios-ssn (ESTABLISHED)
tcpcli 8055 ylei 3u IPv4 312580 0t0 TCP ylei-laptop.local:54080->ylei-laptop.local:9877 (CLOSE_WAIT)
tcpcli 8057 ylei 3u IPv4 312872 0t0 TCP ylei-laptop.local:53773->ylei-linux.local:9877 (CLOSE_WAIT)
这时就可这用KILL命令来杀死这些进程。
这种CLOSE_WAIT
进程遗留多了会对系统有一定的影响,
如何避免出现CLOSE_WAIT状态的通信进程?
http://blog.chinaunix.net/u/19782/showart_218982.html
这是一篇lsof使用的文章,可作参考。