리눅스가 프로세스를 사라지게 할 수 있나요?

리눅스가 프로세스를 사라지게 할 수 있나요?

내 프로세스 중 하나가 OOM Killer에 의해 종료되었습니다. 이로 인해 Linux 커널이 SIGKILL을 보내는 이유가 무엇인지 생각하게 되었습니다. 내 말은, 순서대로 프로세스를 종료하는 이유를 알고 있다는 뜻입니다.

그러나 Linux 커널에는 프로세스를 삭제할 수 있는 기능이 있습니까? 다른 어떤 프로세스도 삭제된 프로세스에 무슨 일이 일어났는지 알 수 없나요? 구조에서 해당 벡터와 항목을 삭제하고 계속하시겠습니까?

아마도 이는 이 프로세스의 합리적인 동작에 의존하는 다른 모든 프로세스를 위험에 빠뜨릴 것입니다. 그러나 이러한 행동의 불합리성을 고려하면 그것은 공평해 보인다. 분명히 말하면, 질문은 "해야 하는가"보다는 "할 수 있는가?"에 더 가깝습니다. 프로덕션 데이터베이스 서버에서는 이 작업을 수행하지 않겠다고 약속합니다.

답변1

프로세스는 진공 상태로 존재하지 않습니다. 그들은 그들을 기다리고 있는 부모(그리고 아마도 자식) 프로세스를 가지고 있습니다. 그들은 또한 다른 사람들이 필요로 하는 자원을 보유할 수도 있습니다...

그래서,오직사라지는 것은 작동하지 않습니다. 많은 작업이 필요하며 시스템의 다른 부분에 알려야 합니다.

단순히 신호를 보내는 대신 신호를 보내는 이유그냥 하는 중바로 할 수 있나요? 글쎄, 그것은 깨끗한 방법이며 논리를 재사용할 수 있습니다. 포착되지 않은 신호 SIGTERM(또는 포착된 후 종료된 신호)는 거의 동일한 작업을 수행합니다. 또한 부모에게 상황을 일관되게 보고하고 단 하나의 코드로 모든 상황을 처리할 수도 있습니다.

관련 정보