직업과 프로세스의 차이점은 무엇입니까?


답변:


46

프로세스는 자체 주소 공간이있는 실행중인 프로그램입니다.

작업은 쉘에서 사용하는 개념입니다. 대화식으로 시작하여 분리되지 않은 (즉, 데몬이 아닌) 프로그램은 작업입니다. 대화식 프로그램을 실행중인 CtrlZ경우을 눌러 일시 중단 할 수 있습니다 . 그런 다음 전경 ()을 사용 fg하거나 배경 ()을 사용하여 다시 시작할 수 있습니다 bg.

프로그램이 백그라운드에서 일시 중단되거나 실행되는 동안 다른 프로그램을 시작할 수 있습니다. 그러면 두 개의 작업이 실행됩니다. 다음과 같이 "&"를 추가하여 백그라운드에서 실행중인 프로그램을 시작할 수도 있습니다 program &. 그 프로그램은 배경 작업이 될 것입니다. 실행중인 모든 작업을 나열하려면을 사용할 수 있습니다 jobs.

작업에 대한 자세한 내용 은 bash 매뉴얼 페이지 의이 섹션 을 참조하십시오.


우리가 때 위의 예에서, 이 작업이 실행 우리는 또한이 두 프로세스가 실행 우리는하지 않습니다? 자체 주소 공간 의 의미를 자세히 설명해 시겠습니까? 어떤 경우에 프로그램에는 자체 주소 공간이 없습니까?
Kenny

@ 케니 네, 그 트로이 직업도 프로세스 일 것입니다. 실제로 모든 직업은 과정입니다. 직업은 그녀의 세션과 관련이 있습니다. 당신의 tty에서 분리되지 않은 당신이 시작하는 모든 프로세스는 일입니다.
Shawn J. Goff

@Kenny, 프로세스에 관해서는 프로그램을 말할 때 그것은 매우 일반적인 것입니다-CPU가 수행하는 명령 세트. 이것을 작업 또는 실행 스레드라고도합니다. 프로세스는 주소 공간을 공유하는 다른 스레드를 작성할 수 있습니다.
Shawn J. Goff

1
in과 같은 파이프 된 명령 ls | sort은 작업이지만 각 명령은 다른 서브 쉘 프로세스의 하위 프로세스로 실행됩니다. 이것은 여러 프로세스로 구성된 작업의 예입니다. 작업 정의가 작업이 여러 프로세스로 구성 될 수 있음을 어떻게 설명 할 수 있습니까?
Tim

30

UNIX에는 "프로세스", "프로세스 그룹"및 "세션"이라는 별도의 개념이 있습니다.

로그인 할 때마다 각 쉘은 새로운 세션 및 프로세스 그룹의 리더가되고 터미널의 제어 프로세스 그룹을 자체로 설정합니다.

쉘은 실행되는 각 "작업"에 대해 현재 세션 내에 프로세스 그룹을 작성하고 시작하는 각 프로세스를 적절한 프로세스 그룹에 배치합니다. 예를 들어, ls | head셸이 단일 작업을 고려하고 단일 새 프로세스 그룹에 속하는 두 프로세스의 파이프 라인입니다.

프로세스는 실행 스레드 및 주소 공간 및 파일 설명자 테이블과 같은 기타 컨텍스트의 (수집) 스레드입니다. 프로세스는 다른 프로세스를 시작할 수 있습니다. 이러한 새로운 프로세스는 다른 조치를 취하지 않는 한 상위 프로세스와 동일한 프로세스 그룹에 속합니다. 각 프로세스에는 "제어 터미널"이있을 수 있으며,이 터미널은 상위와 동일하게 시작됩니다.

쉘에는 "전경"작업과 "백그라운드"작업의 개념이 있습니다. 포 그라운드 작업은 터미널을 제어하는 ​​프로세스 그룹이고 백그라운드 작업은 터미널을 제어하지 않는 프로세스 그룹입니다.

각 터미널에는 포 그라운드 프로세스 그룹이 있습니다. 작업을 포 그라운드로 가져올 때 쉘은이를 작업을 터미널의 포 그라운드 프로세스 그룹으로 설정합니다. 작업을 백그라운드에 놓을 때, 쉘은 터미널의 포 그라운드 프로세스 그룹을 다른 프로세스 그룹 또는 자체로 설정합니다.

프로세스가 포 그라운드 프로세스 그룹에있는 경우 제어 터미널에서 프로세스를 읽고 쓸 수 있습니다. 그렇지 않으면 터미널에서 각각 읽고 쓰려고 할 때 신호를 수신 SIGTTIN하고 SIGTTOU신호를 보냅니다. SIGTTOU백그라운드 작업이 터미널에 중단없이 쓰일 수 있도록 대부분의 쉘은 마스크 처리하지만 기본적으로 이러한 신호는 프로세스를 일시 중단합니다 .


1
이것은 쉘 및 터미널 프로세스 관리에 대한 간결한 개요입니다. “작업”은“파이프 라인”이며 프로세스 그룹에서 둘 이상의 프로세스가 함께 연결될 수 있다는 점을 언급하면 ​​개선 될 수 있습니다.
Chris 페이지

1

컴퓨팅에서 작업작업 단위 또는 실행 단위 (상기 작업을 수행하는 단위)입니다. 작업 구성 요소 (작업 단위)를 작업 또는 단계 (작업 스트림에서와 같이 순차적 인 경우)라고합니다. 실행 단위로서, 작업은 단일 프로세스로 구체적으로 식별 될 수 있으며, 이는 단일 프로세스로 구성 될 수 있고, 이는 하위 프로세스 (하위 프로세스; 상위 프로세스 인 작업에 대응하는 프로세스)를 가질 수있다. 일; 또는 프로세스 그룹과 함께; 또는 Unix 작업 제어에서와 같이 프로세스 또는 프로세스 그룹에 대한 추상 참조가 있습니다.

출처

좋은 예


-1

위의 정의는 매우 기술적 인 것이지만 op가 더 많은 설명을 원했을 수도 있습니다. 나는 직업이 예정된 과정이라고 생각합니다. 우리가 일반적으로 프로세스를 다룰 때, 스케줄이라는 개념이 반드시 필요한 것은 아니지만, "job"이라는 단어를 사용할 때 항상 스케줄처럼 반복되거나 반복되는 것은 작업자와 같습니다.


1
투표를하려면 투표에 대해 설명하십시오. 이 답변이 맞지 않으면 적어도 왜 틀렸다고 생각하는지 설명하십시오. 지금까지도 여전히 제 대답이 합리적이라고 생각합니다. 그것은 제가 찾고 있던 일종의 설명입니다.
eloone

투표를 한 사람이 그 이유를 설명해야한다는 데 동의합니다. 그러나 공감대를 선택한 이유는 "직업"에 대한 정의가 단순히 정확하지 않기 때문입니다.
prograde

왜 올바르지 않은지 설명해 주시겠습니까? "작업"은 "프로세스"와 같은 방식으로 명확하게 정의되지 않습니다 (시스템의 PID 사용). 내 경험에서 "작업"은 항상 일정이 잡히고 백그라운드에서 시작하여 시작할 수있는 특정 종류의 프로세스를 정의하는 데 사용되는 단어였습니다. 사용이 정의하기 때문에 정의하기 어려운 이유가 여기에 있습니다. 프로세스 그룹 일 수도 있지만 "컨테이너"(LXC)도 "컨테이너"는 "작업"이 아닙니다. "nginx"와 같은 시작된 프로세스도 "작업"이 아닙니다. 내 의견은 여전히 ​​sth를 답변에 추가합니다. 다시, 그것은 내가 이해하려고했던 것에 대답합니다.
eloone

나는 여전히 올바른 정의를 찾고 있습니다. 죄송합니다. 아직 답변을 드릴 수 없습니다. 그러나 올바르지 않은 것은 예약해야한다는 것입니다.
prograde
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.