对于 Unix 的“who”命令来说,“活动”是指什么?我们试图找到空闲会话,但对于此上下文中活动的确切含义存在分歧。有人认为活动时间只能通过用户输入重置 - 即从标准输入进入会话的数据。其他人则认为任何 CPU 活动都可以。权威的答案会很有用。
答案1
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
jferland pts/2 jferland:S.1 10:35 2.00s 0.18s 0.18s /bin/bash
jferland pts/3 jferland:S.2 10:35 45.00s 0.18s 0.00s sleep 30
jferland pts/1 jferland:S.0 10:35 0.00s 0.21s 0.00s w
S.0:我正在检查,所以那里的时间肯定是 0。
S.1:我打开了一个 shell。两秒钟前我按下了一个键,但没有按回车键。因此,即使没有回车,收到的任何输入都可以正常工作。
S.2:我运行了while true; do echo "foo"; sleep 30; done
。我甚至在中间输入了一个字符。由于输入被阻止(从未读取),我仍然在那里闲置。
结论
当从终端输入读取字符时,空闲时间会被重置。即使被阻止的输入确实会影响屏幕显示,也不会更新空闲时间。应用程序可能会根据不同的规则进行更新。例如,我使用了按行读取输入的命令,因此它只会在按下回车键时更新我的空闲时间。 (按字面意思执行为没有参数)write
也是如此。perl
perl
答案2
进程始终在运行,空闲时间并不重要。
如果你做了:
while true; do w; sleep 0.1; done
在一个终端中,然后打开另一个终端,您将看到另一个会话的空闲时间被重置为零,只有当用户输入某些内容(按下某个键)时才重置。如果您运行:
while true; do ls; done
在另一个终端,空闲时间将继续增加。
因此仅当会话读取用户输入时,空闲计时器才会重置。