Что происходит с запросами к службе, остановленной с помощью SIGSTOP

8

Если вы отправляете SIGSTOP на веб-сервер, ядро ​​просто говорит сетевому стеку блокировать / спать все соединения с сокетом (ями) этого сервера до тех пор, пока он не будет продолжен? Кажется, что значения времени ожидания сервера не имеют значения; это будет ждать бесконечно, но как?

Будут ли запросы храниться в буфере сокета бесконечно? Что делать, если веб-сервер получает тонны запросов? Что происходит, когда буфер сокета заполняется?

Грегг Левенталь
источник

Ответы:

5

С точки зрения любой части системы, которая не связана с состоянием и статистикой процесса, процесс, который остановлен (т.е. не будет запланирован, пока не получит SIGCONT), неотличим от процесса, который выполняется, но не отвечает на конкретный запрос. Например, сетевой стек работает одинаково, независимо от того, остановлен ли процесс, выполняет ли он работу (использует процессорное время), но не выполняет какой-либо системный вызов, или заблокирован в каком-либо системном вызове, который не разблокирован источником, генерирующим сеть событие (например, ожидание чтения из канала) и т. д.

Пока процесс остановлен, в процессе не существует такой вещи, как тайм-аут. Обычно в сетевом стеке также нет таймаутов: пакет был получен машиной, даже если он не попал на машину. Что касается, например, передачи TCP, пакет получен, и приложение должно ответить.

Если буфер сокета заполняется, сетевой стек начнет отбрасывать пакеты.

Нет причин, по которым поведение сетевого стека будет зависеть от состояния процесса. Процесс может выйти из остановленного состояния в любое время. Может быть несколько процессов, прослушивающих сокет, поэтому любое решение, основанное на состоянии процесса, должно учитывать все из них.

Жиль "ТАК - перестань быть злым"
источник