bash로 실행되는 프로그램이 새 작업에서 실행됩니까?

bash로 실행되는 프로그램이 새 작업에서 실행됩니까?

존재하다이 비디오, 그것은 말한다 :

일반적인 상황에서 터미널을 열고 내부에서 실행 중인 셸이 있으면 해당 셸은 새 세션의 시작을 나타냅니다. 세션은 셸 프로세스가 포함된 작업으로 시작됩니다. 쉘이 전경에서 파이프를 실행할 때 파이프의 프로세스는 기존 작업에 대한 프로세스로 실행됩니다.

그리고 유명한 곳에서는TTY 공개, 셸이 포그라운드에서 파이프라인을 실행하면 새 작업의 일부인 것처럼 보입니다. 무엇이 옳은가요?

여기에 이미지 설명을 입력하세요.

답변1

"프로그램"이 무엇을 의미하는지에 따라 다릅니다.

첫째, 발췌한 영상의 내용은 오해의 소지가 있습니다.회의는 다음과 같이 시작되었습니다.일하다, 쉘 프로세스를 포함합니다."에서 설명했듯이작업과 프로세스의 차이점은 무엇입니까?그리고POSIX 작업 정의,ㅏ일하다 쉘 개념입니다. 따라서 실행 중인 셸은 다음에서 생성되지 않는 한 작업 자체가 아닙니다.상위 쉘 프로세스. 발췌에서 상위 프로세스는 다음과 같습니다.단말기그 중에는 에서 설명한 바와 같이배쉬 가이드는 반드시 쉘일 필요는 없는 텍스트 기반 인터페이스 프로그램을 실행하기 위한 그래픽 인터페이스 프로그램일 뿐입니다.

다음은 테이블을 설명하는 몇 가지 명령입니다.TTY 공개정확하다:

$ cat
hello
hello
^Z
[1]+  Stopped                 cat
$ cat | sort
^Z
$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 cat | sort

cat최종 출력에서 ​​작업 두 개( 및 ) 가 있음을 확인할 수 있습니다. cat | sort후자는 ls | sort테이블에 해당합니다.

"bash에서 실행되는 프로그램이 새 작업에서 실행되는지 여부"에 대해서는 POSIX정의:

일하다

동일한 프로세스 그룹에 있는 셸 파이프 및 여기에서 파생된 모든 프로세스를 포함하는 프로세스 그룹입니다.

따라서 "셸 파이프를 포함하는 프로세스 집합"을 실행 중인 프로그램(프로그램이 실행될 명령 집합이라는 사실로 알 수 있음)으로 간주한다면 그렇습니다.

그러나 "프로그램"은 "쉘 파이프"보다 더 일반적인 개념이므로 bash에서 실행되는 프로그램은 일반적으로 새 작업에서 실행되지 않습니다. 예를 들어 cat, 및 sort도 프로그램이지만 각각 별도의 작업에서 실행되지는 않습니다.

반품,쉘 내장 함수"명령어 세트"이기 때문에 "프로그램"입니다. 그러나 이들은 셸 프로그램 자체에 포함된 구성 요소이므로 실행을 위해 반드시 별도의 하위 프로세스로 생성될 필요는 없습니다. 별도의 하위 프로세스에서 실행되지 않으면 셸 작업의 일부가 될 수 없습니다.

답변2

네, 그렇습니다. 뒤에 ^Z를 입력하여 셸에서 생성할 수 bg있으며 자체 PID로 계속 실행됩니다.

관련 정보