백그라운드 프로세스로서의 프로세스 목록

백그라운드 프로세스로서의 프로세스 목록
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)
1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)&
[1] 3297
abhigenie92@ubuntu:~$ 1

[1]+  Done                    ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )

백그라운드 프로세스로 시작할 때 어떤 일이 발생합니까? 프롬프트가 표시되지 않고 를 눌러야 하는 이유는 무엇입니까 Enter? 두 경우 모두 서브쉘을 시작합니다.

답변1

얻다프롬프트 반환(코드 블록의 다섯 번째 줄 참조) - 그리고그 다음에당신은 출력을 얻습니다. Enter세 번째로 입력 해도 여전히 "쉘 프롬프트" 상태입니다.

이론적으로는 백그라운드 프로세스가 종료될 때 프롬프트를 다시 발행하도록 셸을 프로그래밍할 수 있습니다. 하지만

  1. 이것은 정말 도움이 되지 않습니다. 문제는 백그라운드 작업이 완료되어 터미널에 나타날 때 echo 1커서 1가 화면의 왼쪽 가장자리로 돌아가고 여전히 "셸 프롬프트"에 있다는 사실이 덜 명확해진다는 것입니다. 그리고 포그라운드 셸은 백그라운드 작업이 언제 화면에 쓰는지 알 수 없습니다.
  2. 역사적으로 쉘은 사용자가 언제인지 알지 못했습니다.유형명령은 사용자가 입력할 때만 알 수 있습니다 Enter. (어떤 경우에는 여전히 그럴 수 있습니다.) 따라서 쉘은 세 번째 명령을 입력하는지 알 수 없습니다.

    (sleep 3; echo someth
    

    명령을 입력하는 도중에 새로운 쉘 프롬프트가 나타나면 매우 혼란스러울 수 있습니다.

관련 정보