문제

나는 다음을했다 :

nohup find / &

rm nohup.out

이상하게도 Nohup -Command는 계속 달렸다. 새 파일이 생성되기를 기다렸습니다. 놀랍게도 그런 파일은 없었습니다. 명령의 stdout은 어디로 갔습니까?

도움이 되었습니까?

해결책

UNIX에서 파일을 제거하면 두 가지가 있습니다.

  • 디렉토리 항목을 제거합니다.
  • 프로세스가 열려 있고 다른 디렉토리 항목을 가리키지 않으면 (하드 링크) 공간을 공개합니다.

Nohupped 프로세스는 기꺼이 Nohup.out라고 불렀던 파일에 기꺼이 쓸 것이지만 이제는 해당 프로세스 내에서 파일 디스크립터로 알려져 있습니다.

다른 프로세스에서도 nohup.out을 만들 수 있습니다. 첫 번째를 방해하지 않습니다.

모든 하드 링크가 사라지고 모든 프로세스가 닫히면 디스크 공간이 복구됩니다.

다른 팁

당신이 삭제하는 경우 nohup.out 파일, 핸들이 손실되고 파일 설명 자에게만 쓸 수 있지만 청소하려는 경우 nohup.out 파일을 실행합니다

true > nohup.out

파일의 내용은 삭제되지만 파일은 아닙니다.

이것이 유닉스의 표준 행동입니다.

파일을 제거하면 파일 시스템의 마지막 링크가 제거되었지만 파일이 여전히 열려 있었으므로 출력이 있습니다. find (이 경우)는 커널 버퍼 풀의 디스크 블록과 디스크에도 작성되었습니다. 그러나 파일에는 이름이 없었습니다. 언제 find 종료, 프로세스 나 파일 (inode)이 파일을 참조하지 않았으므로 공간이 해제되었습니다. 이것은 프로그램이 종료 될 때 사라질 임시 파일이 파일을 열고 제거하여 사라질 수있는 한 가지 방법입니다. (이것은 파일의 이름이 필요하지 않다고 가정합니다. 분명히, 임시 이름이 필요하다면이 기술은 작동하지 않습니다.)

cat /dev/null > nohup.out

~에서 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top