我正在读Unix 电动工具书,并遇到了ps
命令。ps x
书中给出的命令的输出是:
PID TTY STAT TIME COMMAND
18034 tty2 S 0:00 -zsh
18059 ? S 0:01 ssh-agent
18088 tty2 S 0:00 sh /usr/X11R6/bin/startx
18096 tty2 S 0:00 xinit /etc/X11/xinit/xinitrc -- :0 -auth /home/jpeek/
18101 tty2 S 0:00 /usr/bin/gnome-session
18123 tty2 S 0:33 enlightenment -clientId default2
18127 tty2 S 0:01 magicdev --sm-client-id=default12
18141 tty2 S 0:03 panel --sm-client-id default8
18145 tty2 S 0:01 gmc --sm-client-id default10
18166 ? S 1:20 gnomepager_applet --activate-goad-server gnomepager_a
18172 tty2 S 0:01 gnome-terminal
18174 tty2 S 0:00 gnome-pty-helper
18175 pts/0 S 0:00 zsh
18202 tty2 S 0:49 gnome-terminal
18203 tty2 S 0:00 gnome-pty-helper
18204 pts/1 S 0:01 zsh
18427 pts/1 T 0:00 man zshjp
18428 pts/1 T 0:00 sh -c /bin/gunzip -c /home/jpeek/.man/cat1/zshjp.1.gz
18430 pts/1 T 0:03 /usr/bin/less -is
18914 pts/1 T 0:02 vi upt3_changes.html
1263 pts/1 T 0:00 vi urls.html
1511 pts/1 T 0:00 less coding
3363 pts/1 S 0:00 vi 1007.sgm
4844 tty2 S 0:24 /usr/lib/netscape/netscape-communicator -irix-session
4860 tty2 S 0:00 (dns helper)
5055 pts/1 R 0:00 ps x
有人可以帮忙解码这个输出吗?pts/0
和是什么意思pts/1
?
- 我所能找到的只是
pts
代表“伪终端从机”,但无法理解pts/0
和背后的区别pts/1
。 - 为什么会有
?
inTTY
栏?为什么tty
该过程是未知的? - 各种 Gnome 应用程序的含义是什么,例如gnome-pty-helper和gnopager_applet?
非常感谢。
答案1
- 它们是伪终端的不同实例。例如,它们是终端窗口中的不同选项卡。
没有 TTY。该进程已与 tty 分离。使用TIOCNOTTY ioctl() 或setsid()。传统上这样做是为了成为后台进程(又名“守护进程”),当从终端注销时,它不会被 SIGHUP 自动杀死。 (如果它是本例中的 gnome 进程,则可能会通过某种其他机制终止)。
或者,它可能永远不会有 TTY 来启动,例如为
systemd
服务启动的进程。
答案2
过去,终端是连接到串行端口的物理设备。这些在 UNIX 中显示为/dev
.
从输出的外观来看,您正在运行 Linux,因此有两种不同类型的“虚拟”终端。第一组是通过显示器连接的。 Linux 创建了一堆它们,你可以使用它们在它们之间切换Ctrl+Alt+Fn。这些是tty0
, tty1
, 等等。
然后就有了一个概念伪终端。ssh
用于连接到系统的每个会话都需要一个,每个 (Gnome) X 终端会话也需要一个。这些是“pts/n”名称。搜索“伪终端”以了解更多信息。
因此,上面的输出告诉我:您的图形会话绑定到第二个虚拟终端(Ctrl+Alt+F2)。您有两个 gnome 终端,pts/0
并且pts/1
.
尝试使用打开一个新的 VTCtrl+Alt+F1并登录,然后在终端 3 和 4 上重复。每次执行此操作ps -ef
都会显示该终端正在运行的进程。
后台进程没有附加终端,并将显示?
在 TTY 列中。