2010-03-10 5 views
6

더 효율적인 프로세스를 만들기 위해 하위 프로세스를 생성하는 코드가 있습니다. 그러나 그들은 소켓을 차단하고 사이트를 파괴하는 모든 종류의 좀비 프로세스를 만드는 것으로 보입니다.프로세스를 생성 할 때 좀비 프로세스가 나타납니다.

spawn(:method => :thread) do 
    if @login_user.suggested_group_info.new_record? 
     xxx 
    end 
end 

1) 좀비 프로세스를 만드는 이유는 무엇입니까? 2) 내가 좀비가되기 전에 프로세스를 죽일 수 있도록 코드를 어떻게 작성할 수 있습니까?

답변

4

스폰 된 프로세스의 PID를 저장하고 죽은 후에 waitpid (2) 시스템 호출을 실행해야합니다. (나는 루비는이 작업을 수행하는 방법을 모르겠어요.)

+2

를 정리합니다 자식 종료에 대한 트랩. spawn은 pid를 반환합니다. Process.waitpid (pid)를 호출하면 프로세스가 종료 될 때까지 기다린 다음 좀비를 다시 보냅니다. –

0

할 수도 루비가 거의 예상대로이 작업을 수행 좀비 프로세스를

trap("CLD") { 
    pid = Process.wait 
    puts "Child pid #{pid}: terminated" 
} 
관련 문제