ulimit -u가 /proc/sys/kernel/pid_max보다 높은 이유는 무엇입니까?

ulimit -u가 /proc/sys/kernel/pid_max보다 높은 이유는 무엇입니까?

내 시스템 ulimit -u보고서 63172/proc/sys/kernel/pid_max보고서 정보 32768.

의 값이 ulimit -u커널의 값보다 높은 이유는 무엇입니까? 제가 이해한 바로는 ulimit -u시스템 전체의 최대 프로세스가 아닌 사용자가 가질 수 있는 최대 프로세스가 표시됩니다. pid_max커널을 통해 시스템 전체에서 수행되어야 합니다. ulimit -u그보다 높은 값은 잘못된 것 같습니다 . pid_max사용자가 충분한 프로세스를 생성하면 PID 랩어라운드가 발생할 수 있다는 의미입니까? 또한 pid_max사용자가 수행하는 작업에 의해 값이 영향을 받는 경우 이러한 No more processes error일이 발생할 수 있습니까?

답변1

PID하다정상적인 사용 중에 서라운드합니다. 이는 전혀 문제가 되지 않습니다. 커널은 새 PID가 기존 PID와 충돌하지 않도록 보장합니다. PID가 단조롭게 증가해야 한다는 내용은 없습니다. 프로세스 12345는 쉽게 fork()하위 프로세스 5001을 가질 수 있습니다.

이 경우 예, 사용자가 모든 프로세스 슬롯을 사용하고 추가 fork()유형 활동이 발생하지 않도록 방지할 수 있습니다. 이것이 귀하의 환경에서 문제가 되는 경우 ulimit 값을 조정해야 합니다 /etc/security/limits.conf./etc/security/limits.d/*

답변2

이는 일반적으로 사용자 제한에 도달하기 전에 시스템의 프로세스 슬롯이 부족해짐을 의미합니다. 매뉴얼 페이지에는 다음과 setrlimit같이 나와 있습니다.

RLIMIT_NPROC

호출 프로세스의 실제 사용자 ID에 대해 생성할 수 있는 최대 프로세스 수(더 정확하게는 Linux에서는 스레드)입니다. 이 제한에 도달하면 fork(2)오류와 함께 실패합니다 EAGAIN. 이 제한은 또는 기능이 있는 프로세스에는 CAP_SYS_ADMIN적용되지 않습니다 CAP_SYS_RESOURCE.

반환 값은 EAGAIN이것이 동시 스레드에 대한 제한임을 강력하게 암시하며 일단 하위 스레드가 종료되면 후속 스레드가 fork()성공할 수 있습니다.

관련 정보