< /dev/null 및 명령줄에서의 사용법

< /dev/null 및 명령줄에서의 사용법

다음 명령줄을 사용하여 샘플 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.

관련 정보