Unix에서 세션 및 프로세스 그룹의 사용 및 의미?


83

Unix 프로세스는 세션 ID를 가지며 프로세스 그룹의 일부이며 setsid () / getpgrp ()와 같은 함수로 변경 / 쿼리 할 수 ​​있습니다.

그러나 프로세스 그룹과 세션의 개념은 항상 저를 피했습니다. 다른 세션과 프로세스 그룹이 제공하는 중요성을 누구든지 설명 할 수 있습니다. 왜 / 언제 새로운 세션을 생성하거나 여러 프로세스를 동일한 세션 및 / 또는 프로세스 그룹에 배치해야하는지 ?

답변:


104

프로세스 그룹 한꺼번에 시그널링 될 수 관련 프로세스의 집합이다.

세션 중 (로 알려진 하나의 단말 장치에 부착되어 프로세스 그룹의 모음 제어 단자 어떤 단말기에 부착) 또는 없음.

세션은 작업 제어에 사용됩니다. 세션의 프로세스 그룹 중 하나는 포 그라운드 프로세스 그룹이며 터미널 제어 문자로 신호를 보낼 수 있습니다. 제어 터미널이있는 세션은 해당 터미널의 "로그인"에 해당하는 것으로 생각할 수 있습니다. (데몬은 일반적으로 새 세션을 생성하지 않고 제어 터미널에서 분리합니다.)

예를 들어 some_app셸에서 실행 하는 경우 셸은 새 프로세스 그룹을 만들고이를 세션의 포 그라운드 프로세스 그룹으로 만듭니다. ( some_app일부 자식 프로세스를 만들 수 있습니다, 그들은 같은 프로세스 그룹의 일부가 될 것입니다 기본적으로.) 당신은 다음을 눌러 경우 ^Z, some_app의 프로세스 그룹이 중지하라는 지시를 내 렸습니다한다; 셸의 프로세스 그룹이 다시 포 그라운드 프로세스 그룹으로 전환됩니다. 그런 다음 예를 들어 의 프로세스 그룹을 다시 bg %1시작 some_app하지만 백그라운드에서 계속 실행합니다.


POSIX.1-2008 표준 (! 적어도 난 그렇게 생각) 매우 읽을 - 상기 좀 걸릴 정의 와의 관련 부분 "일반 터미널 인터페이스" 장을.


3
이는 나중에 질문으로 나타날 수있는 추가 정보와 함께 매우 좋은 설명입니다
GP92

@MatthewSlattery은 terminalterminal device문서 같은 일에 언급?
alhelal

12

작업 제어 쉘은 항상 세션 또는 프로세스 그룹을 조작합니다. POSIX kill()함수에 대한 단일 호출로 프로세스 그룹의 모든 프로세스에 동일한 신호를 보낼 수 있습니다 .

POSIX 표준은 다음과 같이 말합니다.

pid가 0보다 크면 프로세스 ID가 pid와 같은 프로세스로 sig가 전송됩니다.

pid가 0이면 프로세스 그룹 ID가 송신자의 프로세스 그룹 ID와 같고 프로세스가 신호를 보낼 권한이있는 모든 프로세스 (지정되지 않은 시스템 프로세스 세트 제외)에 sig가 전송됩니다.

pid가 -1이면 프로세스가 해당 신호를 보낼 수있는 권한이있는 모든 프로세스 (지정되지 않은 시스템 프로세스 집합 제외)로 sig가 전송됩니다.

pid가 음수이지만 -1이 아닌 경우, 프로세스 그룹 ID가 pid의 절대 값과 같고 프로세스가 신호를 보낼 수있는 권한이있는 모든 프로세스 (지정되지 않은 시스템 프로세스 집합 제외)에 sig가 전송됩니다. .

예를 들어 로그인 쉘이 종료되면 SIGHUP 신호가 해당 프로세스 그룹의 모든 프로그램에 전송됩니다.

프로그램을 포 그라운드 또는 백그라운드로 조작 할 때 프로세스 그룹을 사용하고 있습니다.

걱정할 제어 터미널도 있습니다. 제어 터미널에 의해 생성 된 신호는 프로세스 그룹의 모든 프로그램에 전송 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.