다음 명령줄을 사용하여 샘플 Java 프로그램을 실행해 봅니다. 그런데 꼬리가 무엇인지 모르겠어요 < /dev/null &
?
java -cp /home/weka.jar weka.classifiers.trees.J48 –t train_file >& log < /dev/null &
답변1
< /dev/null
입력을 기다리지 않도록 프로그램에 EOF를 즉시 보내는 데 사용됩니다. /dev/null
빈 장치는 기록된 모든 데이터를 삭제하지만 쓰기 작업이 성공한 것으로 보고하고 읽을 데이터를 제공하지 않는 특수 파일입니다. 즉시 EOF 프로세스를 생성합니다). &
이전 프로세스에 대한 배경을 제공하는 데 사용되는 특수한 유형의 명령 구분 기호입니다.
프로그램이 호출되는 것을 모르면 왜 이런 식으로 실행해야 하는지 직접 알 수 없습니다.
답변2
</dev/null
터미널에서 프로그램 입력을 분리합니다. 일부 프로그램은 표준 입력이 무엇에 연결되어 있는지에 따라 다르게 반응합니다. 리디렉션을 사용하면 </dev/null
프로그램은 입력이 터미널에서 오는 것이 아니라는 것을 알 수 있으며, 표준 입력에서 읽으려고 하면 즉시 파일 끝 표시를 받게 됩니다.
끝에 lone이 있으면 &
프로그램이 백그라운드에서 실행됩니다. 이는 쉘 프롬프트가 즉시 수신된다는 의미입니다. 그렇지 않은 경우 &
프로그램 실행이 완료된 경우에만 쉘 프롬프트가 표시됩니다.
&
독립적인 것과 관련되지 않은 것을 참고하세요 >&
. >&
프로그램의 표준 출력과 프로그램의 표준 오류를 연산자 뒤에 지정된 파일 이름(여기 log
)으로 리디렉션하는 리디렉션 연산자(tcsh, bash 및 zsh)입니다.
즉, 쉘이 이 명령줄을 볼 때 다음을 수행합니다.
- 백그라운드에서 프로세스를 시작합니다. 백그라운드 프로세스에서:
- 표준 입력을
/dev/null
(빈 장치). - 표준 출력 및 표준 오류를 호출된 파일에 연결합니다
log
(파일이 아직 없으면 생성하고, 있으면 잘라냅니다). java
에서 찾으세요$PATH
.-cp
,/home/weka.jar
,weka.classifiers.trees.J48
및 5개의 매개변수를 사용–t
하여 이 파일을 실행합니다train_file
.
- 표준 입력을