我有进程启动后绑定到地址和端口。这些进程使用exec
在屏幕上运行,以便在子进程关闭时关闭屏幕。
当杀死进程时,我使用kill -9 PID
,但有时屏幕结束,但是当我重新启动进程时,旧进程仍在使用端口,我必须再次终止进程。
我还读到SIGKILL
保留套接字打开,陈旧内存,随机资源正在使用中,所以我转向普通kill PID
,这是一个SIGTERM
。
是否保证SIGTERM
允许进程从地址和端口解除绑定,还是有更好的替代方法?
答案 0 :(得分:1)
如果SIGKILL保持监听端口打开的所有进程,则保证关闭。
但是,它可能不会关闭几分钟,而它处于TIME_WAIT状态,这是TCP规范所要求的(让侦听客户端知道端口在它们错过原始关闭数据包时关闭)。
行为良好的服务器将使用选项SO_REUSEADDR打开套接字,允许它在重新启动时立即回收相同的端口,但这是特定于应用程序的。没有它,端口似乎将被使用几分钟。