우선 아래 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는 다르다)