ILD

how to get the controlling terminal of a process
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-8-7 站点:Inside Linux Development

使用ps的时候,可以显示进程的终端

$ ps

    PID TTY          TIME CMD

  31313 pts/4    00:00:00 bash

  31900 pts/4    00:00:00 ps


那么,ps是怎么获取的信息呢?


1 读取/proc/pid/stat

第7列,就是tty_nr,tty设备的id。

第8列,就是tty_pgrp,表示tty设备的feregound process group


$ cat /proc/31313/stat

31313 (bash) S 31164 31313 31313 34820 31986 4194304 13449 108166 0 8 7 7 77 50 20 0 1 0 7585731 14573568 1385 18446744073709551615 94448572293120 94448573015765 140723805266128 0 0 0 65536 3670020 1266777851 1 0 0 17 8 0 0 0 0 0 94448573246704 94448573294084 94448588689408 140723805267531 140723805267537 140723805267537 140723805269998 0


比如上面ps的bash进程的,tty_nr就是34820,这是10进制,转成16进制就是:8804


2 找到 tty_nr 所在的 tty设备


读取 /proc/tty/drivers

$ cat /proc/tty/drivers

/dev/tty             /dev/tty        5       0 system:/dev/tty

/dev/console         /dev/console    5       1 system:console

/dev/ptmx            /dev/ptmx       5       2 system

/dev/vc/0            /dev/vc/0       4       0 system:vtmaster

ttyprintk            /dev/ttyprintk   5       3 console

max310x              /dev/ttyMAX   204 209-224 serial

serial               /dev/ttyS       4 64-111 serial

pty_slave            /dev/pts      136 0-1048575 pty:slave

pty_master           /dev/ptm      128 0-1048575 pty:master

unknown              /dev/tty        4 1-63 console


可以枚举出所有的tty路径。由于上述tty_nr是8804,也就是是第4个,这应该就是/dev/pts/4


$ stat /dev/pts/4

  File: /dev/pts/4

  Size: 0               Blocks: 0          IO Block: 1024   character special file

Device: 18h/24d Inode: 7           Links: 1     Device type: 88,4

Access: (0620/crw--w----)  Uid: ( 1000/    yuan)   Gid: (    5/     tty)

Access: 2024-08-07 18:54:10.165447694 +0800

Modify: 2024-08-07 18:54:10.165447694 +0800

Change: 2024-08-07 15:24:59.165447694 +0800

 Birth: -


使用stat命令,实际调用stat()系统调用。查看 st_rdev 成员,就是0x8804


参考

https://docs.kernel.org/filesystems/proc.html


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.