NFS 디렉터리에 액세스하려고 하는 서버에 SSH를 통해 연결합니다. 그러나 연결 문제로 인해 ls
이 디렉터리에서 기본 명령을 완료하는 데 시간이 오래 걸리는 경우가 있습니다(항상은 아니지만). SSH 연결을 종료하고 다시 여는 것보다 이러한 명령을 중단하는 더 좋은 방법이 있습니까? 보내도 SIGING
효과가 없는 것 같습니다.
답변1
커널 버전 2.6.25 이후에는 액세스할 수 없는 NFS 마운트에 정지된 프로세스를 중지하는 유일한 방법은 SIGKILL입니다 kill -9
.
이 커널 버전 이전에는 사용되는 마운트 옵션에 의존했습니다. 이 옵션을 사용하면 hard,nointr
프로세스가 중단되지 않고 hard,intr
NFS 중단 프로세스가 SIGINT를 사용하여 중단될 수 있습니다.
커널 2.6.25에서는 완전히 종료할 수 없는 프로세스는 일반적으로 매우 바람직하지 않다는 것이 인식되어 전체 intr/nointr
마운트 옵션 쌍이 작동 불가능으로 설정되어 intr
표준 작동 모드가 되었습니다. 동시에 이 상태의 프로세스는 신중하게 고려한 후에만 종료되어야 함을 나타내기 위해 신호 요구 사항이 SIGKILL로 강화되었습니다.
본질적으로 읽기 전용 프로세스(예: ls
항상 종료해도 안전해야 함)이지만 프로세스가 NFS 파일 시스템에 있는 파일에 쓰는 경우 액세스할 수 없는 NFS 서버에 정지되어 종료됩니다. 일관되지 않은 상태에 있을 수 있으며 일부 애플리케이션별 복구 작업이 필요할 수 있습니다.
options 를 사용하면 soft,timeo=<number of deciseconds>
지정된 시간이 지나면 오류와 함께 작업이 자동으로 실패하지만 이로 인해 데이터 무결성 문제가 발생할 수 있습니다. 예를 들어, 프로그램이 쓰기 가능 기능이 있는 NFS 기반 파일에 액세스하고 mmap(2)
쓰기 작업이 실패한 경우 프로그램에 오류를 다시 보고할 방법이 없으며 프로그램이 계속 진행되지 않는 한 프로그램이 계속 진행되는 것을 방지할 수 있는 확실한 방법도 없습니다. /프로그램이 munmap(2)
또는 를 호출할 때까지 msync(2)
. 따라서 메모리의 데이터와 디스크의 데이터가 동기화되지 않거나 메모리 매핑된 데이터가 프로그램 뒤에서 자동으로 미리 작성된 상태로 복원되어야 합니다.어느 것도 아니다그건 좋은 선택이고저것soft
이것이 NFS 마운트 옵션이 일반적으로 권장되지 않는 이유입니다.