답변:
첫 번째 명령의 한 가지 문제는 stderout을 stdout이있는 위치로 리디렉션하고 (댓글에서 제안한대로 $를 &로 변경 한 경우) stdout을 일부 로그 파일로 리디렉션했지만 리디렉션 된 stderr를 따라 가지 않는 것입니다 . 다른 순서로 수행해야합니다. 먼저 원하는 위치로 stdout을 보낸 다음 stdout이있는 주소로 stderr를 보내십시오.
some_cmd > some_file 2>&1 &
그런 다음 &를 던져 배경으로 보낼 수 있습니다. jobs
명령을 사용하여 작업에 액세스 할 수 있습니다 . jobs
실행중인 작업을 보여주고 번호를 매 깁니다. 그런 다음 % 뒤에 숫자 등을 사용하여 작업에 대해 이야기 할 수 kill %1
있습니다.
또한 &가 없으면으로 명령을 일시 중단하고 명령을 Ctrlz사용 bg
하여 배경에 넣고 fg
전경으로 다시 가져올 수 있습니다. jobs
이 명령 과 함께 이것은 강력합니다.
명령을 작성하는 순서에 대해 위의 부분을 명확히하기 위해. stderr이 주소 1002이고 stdout이 주소 1001이고 파일이 1008이라고 가정합니다.이 명령은 왼쪽에서 오른쪽으로 읽으므로 가장 먼저 표시되는 것은 2>&1
stderr을 주소 1001 > file
로 이동 한 다음 stdout이 1008로 이동하는 것을 보는 것 입니다. 그러나 stderr를 1001로 유지합니다. 1001을 가리키는 모든 항목을 가져 와서 1008로 이동하지는 않지만 stdout을 참조하여 파일로 이동합니다.
다른 방법으로 stdout을 1008로 이동 한 다음 stdout이 가리키는 지점 (1008)으로 stderr을 이동합니다. 이렇게하면 둘 다 단일 파일을 가리킬 수 있습니다.
$!
&> file.out
stdin과 stdout을 출력 파일로 리디렉션 하는 데 사용할 수 있습니다. 이렇게하면 2>&1
명령 줄에서 잘못된 위치에 놓을 때 실수가 발생할 가능성이 줄어 듭니다 .
<Ctrl+Z>
백그라운드에서 중지 하고 백그라운드에서 계속 하는 것은 명령 끝에서 bg
실행하는 것과 같습니다 &
.
따라서 백그라운드에서 실행하고 출력을 리디렉션하려면 다음을 수행하십시오.
java -jar myProgram.jar 2> errorOutput.log > output.log &
터미널을 떠날 때이 명령이 종료되지 않아야하는 경우에도 사용해야합니다. nohup
&
bg
후을 실행하여 세션에서 프로세스를 분리 할 수 disown
있으므로 터미널을 닫을 때 프로세스가 종료되지 않습니다.
2>$1
아마 있어야합니다2>&1
.