2014-12-07 4 views
2

두 개의 하위 프로세스를 생성하는 Linux 프로세스 (C 프로그램)가 있습니다. 나는 시스템 레벨의 자식 프로세스에서 또 다른 포크를 금지하여 어쨌든 포크를 시도하면 해당 프로세스가 종료 될 수 있도록하고 싶습니다. 그것을 성취하는 방법? 호스트 C 코드에이 정책을 포함시키는 것을 선호합니다. setrlimit(2) 할 수 있습니까?하위 프로세스에서 분기 방지 방지

+1

코드를 게시 할 수 있습니까? 부모 프로세스에서 포크하는 경우 자식을 분기하는 방법이 없습니다/자식을 포크로 보는 방법은 무엇입니까 – chris

+0

이 메커니즘은 얼마나 안전해야합니까? 특정 공격 시나리오를 염두에 두거나 디버깅을위한 것입니까? – 5gon12eder

+0

@ 5gon12eder 예! 신뢰할 수없는 자식 코드를 실행하기 때문에 절대적으로 안전합니다. – eeq

답변

1

예, setrlimit()이이를 수행 할 수 있습니다. man 페이지를 참조

RLIMIT_NPROC
에 프로세스의 최대 수를 읽어 (또는, 더 정확하게 리눅스, 스레드) 가 호출 프로세스의 실제 사용자 ID 생성 될 수있다. 이 한계가 발생하면 fork (2) 이 EAGAIN 오류로 실패합니다.

또는 /etc/security/limits.conf을 사용하여 프로세스에 하드 제한을 설정할 수 있습니다. 파일에서 예제를 찾아보십시오.

#@student  hard nproc   20 
#@faculty  soft nproc   20 
#@faculty  hard nproc   50 
#ftp    hard nproc   0 
+0

지금 확실하지 않습니다. 자녀 과정을 어떻게 제한 하시겠습니까? 그들은 자신의 한계를 물려받습니다. Ptrace 솔루션은 훨씬 더 실용적입니다. – eeq