&는 백그라운드에서 명령을 실행하는 데 사용됩니다.

&는 백그라운드에서 명령을 실행하는 데 사용됩니다.

내가 달릴 때

$ ls -R / & 

(프로세스는 백그라운드로 내려갈 예정 이었지만 &) 결국 앉아서 시스템의 전체 목록을 살펴보아야 했습니다. CTRL+C 또는 CTRL+Z를 눌러도 도움이 되지 않습니다. 내가 뭘 잘못했나요?

답변1

ls -R /백그라운드에서 실행 하면 명령이 즉시 시작되고 호출 셸(대화형 셸)에 다시 제어권이 전달됩니다. 그러나 표준 출력 및 표준 오류 스트림은 ls여전히 ​​터미널에 연결되어 있으므로 터미널에 명령 출력이 표시됩니다.

댓글에서/dev/null명령 출력을 터미널로 스트리밍하지 않도록 리디렉션할 수 있음을 나타내는 후속 질문을 합니다 .

ls -R / >/dev/null 2>&1 &

후속 질문은 " Exit 1jobs -l.

ls완전히 성공적으로 실행되지 않았기 때문에 종료 상태가 0이 아닙니다 . 전체 시스템의 모든 파일을 재귀적으로 나열하려고 시도하고 있으며 명령을 실행하는 사용자가 시스템의 일부 디렉터리를 읽을 수 없기 때문에 이는 사실이 아닙니다. 표준 오류 스트림을 명령줄에서 제거 /dev/null하여 리디렉션하지 않으면 2>&1터미널에 오류가 표시될 수 있습니다.

관련 정보