우선 아래 ps 출력을 좀 보고,
root 2743 1 0 Oct15 ? 00:00:00 /usr/sbin/sshd
root 23689 2743 0 14:14 ? 00:00:00 sshd: jdh69 [priv]
jdh69 23691 23689 0 14:14 ? 00:00:00 sshd: jdh69@pts/6
jdh69 23692 23691 0 14:14 pts/6 00:00:00 –bash
여기서 getpgrp() 사용한 놈을 실행 시켜 결과를 좀 뿌리고,
[jdh69@localhost ~]$ ./pidT1
[child] PID : 23844
[child] PPID : 23843
[parent] PID : 23843
[parent] PID of child : 23844
[parent] PPID : 23692
[parent] GID : 23843
[parent] SID : 23692
[child] GID : 23843
[child] SID : 23692
printout data from MSB to LSB: 0 9 0 0
[parent] status is 2304
다음 내가 login 한 GID를 살펴보면,
[jdh69@localhost ~]$ cat /etc/group | grep jdh69
jdh69:x:508:
해석을 좀 해보면,
getpgrp()에서 받아오는 Group ID는 process group ID로서
이건 해당 실행파일이 기동하면서 받은 process ID 임을 알 수 있다
그리고 SID는 해당 실행파일이 기동할 때 사용한 shell의 process ID 되겠다
끝으로 /etc/group의 GID는 해당 로그인 계정이 속한 user group의 ID이다
이건 getpgrp()의 결과값과 전혀 관계가 없다!
위에서 부터 좀 살펴보면
sshd –> sshd(내 session 처리 위한 사본) –> sshd(내 권한 처리 위한 사본)
-> bash(여기서의 process ID가 getsid()의 결과) –> pidT1(여기서의 process ID가 getpgrp()의 결과)
-> child (pidT1이 fork()해서 만든 process, pidT1과 GID, SID는 같고 PID, PPID는 다르다)