프로세스 공유 SID는 *항상* PGID를 공유한다는 의미인가요?

프로세스 공유 SID는 *항상* PGID를 공유한다는 의미인가요?

그렇지 않다면 언제 불일치가 발생합니까?

(나는 그들의 동의를 얻을 수 없습니다.)

SID 공유 프로세스에는 어떤 다른 특성이 있습니까?언제나공유하다?

답변1

세션에는 프로세스를 포함하는 프로세스 그룹이 포함됩니다.

이는 주로 터미널 작업 제어를 위해 만들어졌습니다. 세션은 일반적으로 터미널의 로그인 세션 또는 터미널 에뮬레이터의 전체 셸 세션과 연결됩니다.

로그인하거나 시작하면 xterm새 프로세스가 생성되고 해당 프로세스가 새 세션을 시작하며(자동으로 새 프로세스 그룹 시작) 해당 프로세스(현재 세션 리더이자 프로세스 그룹 리더)가 로그인 쉘을 실행합니다. O_NOCTTY를 사용하지 않고 단말 장치를 열면 프로세스는 단말 장치를 세션과 연결합니다.제어 프로세스터미널). 단말 장치는제어 터미널이 세션의 모든 프로세스입니다.

그런 다음 셸은 자체 프로세스 그룹에서 각 작업을 실행하고(새 프로세스 그룹을 시작하는 프로세스를 분기하고 결국 해당 그룹의 다른 여러 프로세스(예: cmd1 | cmd2파이프라인의 경우)를 분기할 수 있음) ioctl()s터미널에서 특수 작업을 수행합니다 . 어떤 작업이 포그라운드에 있는지 알려주는 장치입니다(예를 들어 터미널에서 I/O 작업을 수행하고 CTRL-C를 통해 SIGINT를 수신할 수 있음).

그렇습니다. 일반적으로 세션당 여러 프로세스 그룹이 있습니다.

예를 들어 대화형 셸에서는 다음과 같습니다.

$ sleep 1 | sh -c 'sleep 2; :' & ps -j
[1] 2902 2903
  PID  PGID   SID TTY          TIME CMD
 2902  2902  4648 pts/23   00:00:00 sleep
 2903  2902  4648 pts/23   00:00:00 sh
 2904  2904  4648 pts/23   00:00:00 ps
 2905  2902  4648 pts/23   00:00:00 sleep
 4648  4648  4648 pts/23   00:00:00 zsh

3개의 프로세스 그룹, 하나는 전경( ps), 하나는 배경, 3개 프로세스( sleep, sleep, sh) 및 대화형 셸입니다.

프로세스 그룹의 모든 프로세스는 동일한 세션에 있어야 합니다. 새 세션을 만들면(프로세스 그룹 리더인 경우에는 이 작업을 수행할 수 없음) 자동으로 새 프로세스 그룹이 생성되기 때문입니다.

나는 독서를 추천한다

info libc 'Job Control'

자세한 내용은 GNU 시스템을 참조하세요.

관련 정보