我使用的是 Mac,以下引用来自man termios
:
当控制终端与会话关联时,其前台进程组将设置为会话领导者的进程组。
为了验证这一点,我打开了一个终端窗口,sleep
在前台运行命令,然后打开另一个终端窗口并运行ps
:
$ ps -o pid,pgid,tpgid,sess,stat,command,tty
PID PGID TPGID SESS STAT COMMAND TTY
44606 44606 45006 0 S -bash ttys000
45006 45006 45006 0 S+ sleep 3000 ttys000
其中将前台进程组显示为45006
,为了获取会话领导者,我使用getsid
和编写了一些 C 代码getpgid
,然后获取以下信息:
pid: 45006 pgid: 45006 sid: 44605
pid: 44605 pgid: 44605 sid: 44605
会话领导者是44605
登录过程:
$ ps -o pid,pgid,tpgid,sess,stat,command,tty -p 44605
PID PGID TPGID SESS STAT COMMAND TTY
44605 44605 45006 0 Ss login -pfl mz /b ttys000
显然,前台进程组45006
与会话领导进程组不同44605
,我错过了什么?谢谢!