보류중인 신호 란 무엇입니까?


9

실행중인 프로세스의 한계를 살펴보면

Max pending signals       15725
  • 이게 뭐야?
  • 바쁜 서비스에 대한 합리적인 가치를 어떻게 알 수 있습니까?

일반적으로 각 제한이 무엇인지 설명하는 페이지를 찾지 못하는 것 같습니다. 일부는 설명이 필요없는 (최대 열린 파일) 일부는 그렇지 않습니다 (최대 msgqueue 크기).


거의 최신 아치 리눅스에서는 커널 3.14.37-1-lts, zsh가 sigpending 31603있습니다. 왜 이러한 제한이 이상한 숫자 (2의 거듭 제곱이 아님)입니까?
Bruce Ediger

답변:


6

매뉴얼 페이지 에 따르면 sigpending:

sigpending ()은 호출 스레드에 전달하기 위해 보류중인 신호 세트 (즉, 차단되는 동안 발생 된 신호)를 리턴합니다.

따라서 프로세스가 D(무정전 절전 상태) 상태 에서 벗어날 때까지 대기하는 신호 (sigterm, sigkill, sigstop 등)를 의미합니다 . 일반적으로 프로세스는 I / O를 대기 할 때 해당 상태에 있습니다. 그 수면을 방해 할 수 없습니다. sigkill ( kill -9) 조차 프로세스가 깨어날 때까지 기다릴 수 없습니다 (신호가 너무 오랫동안 전달 대기 중입니다).

다른 불분명 한 값에 대해서는의 매뉴얼 페이지 를 살펴보십시오 limits.conf.


그것은에 대한 매뉴얼 페이지입니다 sigqueue그리고 setrlimit당신이 정말로보고해야한다고합니다.
JdeBP

0

공정 한계는 setrlimit (2)에 의해 제어됩니다.

따라서 맨 페이지를 살펴볼 수 있습니다.

RLIMIT_SIGPENDING (리눅스 2.6.8부터)

호출 프로세스의 실제 사용자 ID에 대기 할 수있는 신호 수의 한계를 지정합니다. 이 한계를 확인하기 위해 표준 및 실시간 신호가 계산됩니다. 그러나이 제한은 sigqueue (3)에만 적용됩니다. kill (2)를 사용하여 프로세스에 아직 대기열에없는 신호 중 하나의 인스턴스를 대기열에 넣을 수 있습니다.

일반적으로 syscalls 맨 페이지를 살펴볼 때 가장 자세한 정보를 얻을 수 있습니다. C는 UNIX / Linux의 모국어입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.