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

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

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

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

答案1

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

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

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

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

相关内容