对使用 SIGSTOP 停止的服务的请求会发生什么

Gre*_*hal 8 linux networking signals socket

如果您向 Web 服务器发送 SIGSTOP,内核是否只是告诉网络堆栈阻止/休眠与该服务器套接字的所有连接,直到它继续?服务器超时值似乎无关紧要;它会无限期地等待,但是如何呢?

请求会无限期地位于套接字缓冲区中吗?如果 Web 服务器收到大量请求怎么办?当套接字缓冲区填满时会发生什么?

Gil*_*il' 5

从不关心进程状态和统计信息的系统的任何部分的角度来看,停止的进程(即在收到 SIGCONT 之前不会被调度)与正在运行的进程是无法区分的,但是不响应特定查询。例如,无论进程是否停止,或者正在工作(使用 CPU 时间)但不进行任何系统调用,或者在某些系统调用中被阻塞,而网络发起的进程没有解除阻塞,网络堆栈都以相同的方式运行。事件(例如等待从管道读取)等。

当进程停止时,进程中没有超时之类的东西。网络堆栈中通常也没有超时:数据包已被机器接收,即使它尚未到达机器。就例如 TCP 传输而言,数据包已被接收,由应用程序来响应。

如果套接字的缓冲区填满,网络堆栈将开始丢弃数据包。

网络堆栈的行为没有理由依赖于进程的状态。该进程可以随时退出停止状态。可能有多个进程在监听一个套接字,因此任何基于进程状态的决定都必须将所有进程都考虑在内。