그렇지 않다면 언제 불일치가 발생합니까?
(나는 그들의 동의를 얻을 수 없습니다.)
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 시스템을 참조하세요.