리눅스에서 실행 파일이 수정되거나 삭제되면 실행중인 프로그램은 어떻게됩니까? 중이라고 가정 ruby하고 다른 버전으로

/usr/local/bin/ruby백그라운드에서 실행 중이라고 가정 ruby하고 다른 버전으로 덮어 쓰거나 심지어 삭제하십시오 ruby.

루비 프로세스를 실행하는 사람들은 어떻게됩니까?



답변

실행 파일이 정확히 어떻게 업데이트되는지에 달려 있습니다. 동일한 파일을 열고 파일의 일부를 변경하면 나쁜 일이 발생합니다. 파일이 제거되면 파일은 파일 시스템의 디렉토리 구조에서 제거되지만 마지막으로 열린 프로세스가 실행될 때까지 실제로 연결 해제 (삭제)되지 않습니다. 따라서 실행 파일이 제거되고 동일한 이름의 새 실행 파일이 대신 사용되면 이전 파일은 계속 정상적으로 작동해야합니다.


답변

그들은 계속 갈 것입니다. 그들이 스스로 접근하려고 시도하고 완전히 잘못된 것을 받으면 끔찍하게 충돌 할 수 있습니다. 내가하지 않으면하지 않을 것이다 🙂


답변

루비 프로세스를 실행하는 사람들은 어떻게됩니까?

  1. / usr / local / bin / ruby의 사본을 만드십시오
  2. [실행 중이 아니면 / usr / local / bin / ruby를 실행하십시오]
  3. 시도 : rm / usr / local / bin / ruby
  4. 자신을 참조하십시오 🙂

답변

Linux 커널에는 로더라는 구성 요소가 있으며로드 / 링크 프로세스 중에 이미지를 포함하고 실행 파일 자체를 여는 라이브러리라는 구성 요소가 라이브러리에 대한 링크 등으로 완료되면 로더가 파일을 닫습니다. 따라서이 프로세스는 커널이 실제로 프로세스를 시작하는 시점에 이루어지고 완료됩니다.

나중에 실행 파일이 외부 라이브러리를 가져 오려고 할 때 디스크의 원래 실행 파일을 참조해야하는지 잘 모르겠습니다.

디스크에서 실행 파일을 삭제해도 메모리에로드 된 실행 파일에는 영향을 미치지 않는 것이 제 경험입니다. 마찬가지로, 실행 파일이 최신 버전으로 바뀌면 현재 실행중인 파일은 중지되고 다시 시작되지 않는 한 “자동”으로 업데이트되지 않습니다.

루트 디렉토리와 다른 파티션이 마운트 된 전체 디스크가 연결이 끊어진 것처럼 갑자기 작동하게하는 RAID 컨트롤러에 문제가있었습니다. 새 프로그램을로드 할 수 없지만 디스크의 파일이 필요할 때까지 메모리에있는 프로그램이 제대로 작동했습니다.