我w
在两台机器上运行命令。它们都安装了完全相同的系统:Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)。我通过 SSH 在两台机器上以 hans 身份登录。
机器富:
$ w
13:18:20 up 26 days, 6:02, 1 user, load average: 0.02, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
hans pts/0 10.xxx.xxx.xxx 10:14 1.00s 0.08s 0.00s w
机器栏:
$ w
13:11:17 up 46 days, 46 min, 1 user, load average: 0.02, 0.04, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
hans pts/0 10.xxx.xxx.xxx 10:14 0.00s 0.02s 0.02s sshd: hans [priv]
为什么列中的输出不同WHAT
?在 foo 上我看到w
,在 bar: 上看到sshd: hans [priv]
。这种不对称性从何而来?
答案1
该w
命令使用启发式方法来决定将哪个进程显示为当前进程。 Linux 手册页没有解释它是如何工作的,但在我的 OS X 系统上它说:
“当前进程”的概念是模糊的。当前的算法是“终端上不忽略中断的最高编号的进程,或者,如果没有,则终端上编号最高的进程”。例如,在 shell 和编辑器等程序的关键部分,或者在后台 fork 中运行的错误程序并且无法忽略中断时,此操作会失败。 (如果找不到进程,则打印 w
-
。)
那里描述的故障模式可以解释您看到的不一致行为。