![& 백그라운드에서 명령을 실행하는 경우](https://rvso.com/image/154486/%26%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0.png)
내가 달릴 때
$ ls -R / &
( 프로세스 &
를 백그라운드로 이동한다고 가정) 결국 내 시스템의 전체 목록을 살펴보아야 합니다. CTRL+C 또는 CTRL+Z를 눌러도 도움이 되지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
답변1
ls -R /
백그라운드에서 시작하면 명령이 즉시 시작되고 호출하는 셸(대화형 셸)에 제어권이 다시 제공됩니다. 그러나 표준 출력 스트림과 의 표준 오류 스트림은 ls
여전히 터미널에 연결되어 있으므로 터미널에서 명령 출력을 볼 수 있습니다.
댓글에서/dev/null
명령 출력 이 터미널로 스트리밍되는 것을 방지하기 위해 명령 출력을 리디렉션할 수 있음을 보여 주는 후속 질문을 합니다 .
ls -R / >/dev/null 2>&1 &
후속 질문은 ". Exit 1
로 작업 상태를 확인할 때 왜 표시됩니까?"입니다 jobs -l
.
ls
완전히 성공적으로 실행되지 않았기 때문에 0이 아닌 종료 상태를 얻습니다 . 전체 시스템의 모든 파일을 재귀적으로 나열하려고 했고, 아마도 명령을 실행하는 데 사용한 사용자가 시스템의 일부 디렉터리를 읽을 수 없기 때문에 그렇지 않았습니다. 표준 오류 스트림을 명령줄에서 /dev/null
제거하여 리디렉션하지 않은 경우 2>&1
터미널에서 오류가 표시되었을 수 있습니다.