~에서http://www.gnu.org/software/coreutils/manual/html_node/nohup-inplication.html
nohup은 지정된 명령을 실행하고 로그아웃 후에도 명령이 백그라운드에서 계속 실행될 수 있도록 끊기 신호를 무시합니다.
요약:
nohup command [arg]...
표준 입력이 터미널인 경우 터미널 세션에서 명령이 해당 터미널을 사용하기 위한 것이라고 잘못 생각하지 않도록 리디렉션하십시오.
우리가 이것을 해야 하는 이유:
실수로 표준 입력에서 읽으려고 시도하는 명령이 오류를 보고할 수 있도록 대체 파일 설명자를 읽을 수 없도록 만듭니다.
파일의 표준 입력을 리디렉션하지 않습니까
nohup command [arg]... 0<myfile
? 왜0>/dev/null
?이 리디렉션은 GNU 확장입니다. 비 GNU 호스트에 이식 가능하도록 설계된 프로그램을 사용할 수 있습니다
nohup command [arg]... 0>/dev/null
.
답변1
nohup을 사용하여 복잡한 스크립트를 실행하려고 한다고 상상해 보세요. stdin을 읽을 수 없는 파일 설명자로 리디렉션하여 stdin을 읽으려고 하는지 여부를 감지할 수 있습니다. 다음 두 가지 예를 살펴보십시오. 첫 번째 0</dev/null
:
rm nohup.out
nohup sh -c 'head -1' 0</dev/null
echo $?
cat nohup.out
nohup.out 파일은 비어 있고 스크립트의 반환 코드( $?
)는 0입니다. 이는 스크립트가 파일의 끝만 읽었기 때문에 괜찮습니다. 이제 0>/dev/null
ie 0을 사용하여 동일한 스크립트를 열어 보십시오 .출력 전용:
rm nohup.out
nohup sh -c 'head -1' 0>/dev/null
echo $?
cat nohup.out
nohup.out에 오류 메시지가 표시됩니다.
head: error reading 'standard input': Bad file descriptor
종료 코드는 1이며 실패했습니다. 이것이 당신에게 더 유용할 수 있습니다. 다음을 사용하여 stdin을 꺼서 동일한 효과를 얻을 수도 있습니다 0<&-
.
rm nohup.out
nohup sh -c 'head -1' 0<&-
echo $?
cat nohup.out