O que são sinais pendentes?

9

Ao olhar para os limites de um processo em execução, vejo

Max pending signals       15725
  • O que é isso?
  • Como posso determinar um valor razoável para um serviço ocupado?

Geralmente, não consigo encontrar uma página que explique o que é cada limite. Alguns são bastante auto-explicativos (máximo de arquivos abertos), outros menos (tamanho máximo da fila de mensagens).

Bart van Heukelom
fonte
Em um Arch linux quase atualizado, o kernel 3.14.37-1-lts, zsh, eu recebo sigpending 31603. Por que esses limites são números tão estranhos (ou seja, não são 2)?
precisa

Respostas:

6

De acordo com a página de manual de sigpending:

sigpending () retorna o conjunto de sinais que estão pendentes para entrega ao encadeamento de chamada (ou seja, os sinais que foram aumentados enquanto bloqueados).

Portanto, os sinais (sigterm, sigkill, sigstop, ...) estão aguardando até o processo sair do estado D(sono ininterrupto). Geralmente, um processo está nesse estado quando está aguardando E / S. Esse sono não pode ser interrompido. Mesmo sigkill ( kill -9) não pode e o kernel espera até que o processo seja ativado (o sinal está pendente para entrega por tanto tempo).

Para os outros valores pouco claros, daria uma olhada na página de manual de limits.conf.

caos
fonte
São as páginas de manual sigqueuee para as setrlimitquais você realmente deveria estar olhando.
precisa saber é o seguinte
0

Os limites do processo são controlados por setrlimit (2)

Então você pode olhar para a sua página de manual:

RLIMIT_SIGPENDING (desde o Linux 2.6.8)

Especifica o limite do número de sinais que podem estar na fila para o ID do usuário real do processo de chamada. Os sinais padrão e em tempo real são contados com o objetivo de verificar esse limite. No entanto, o limite é imposto apenas para o sigqueue (3); sempre é possível usar kill (2) para enfileirar uma instância de qualquer um dos sinais que ainda não estão na fila do processo.

Geralmente, você pode obter as informações mais detalhadas ao examinar páginas de manual de syscalls. C é a língua materna do UNIX / Linux.

b166er
fonte