Что составляет «активность» для Unix-команды «who»? Мы пытаемся найти незанятые сеансы, но у нас есть разногласия по поводу точного значения активности в этом контексте. Один человек утверждает, что время активности сбрасывается только при вводе пользователем, то есть данных, поступающих в сеанс из стандартного ввода. Другие говорят о любой активности процессора. Был бы полезен авторитетный ответ.
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: Я оставил ракушку открытой. За две секунды до этого я нажал клавишу, не нажимая Enter. Таким образом, любой полученный ввод работает даже без возврата строки.
S.2: Я сбежал while true; do echo "foo"; sleep 30; done
. Я даже напечатал символ в середине. Поскольку ввод был заблокирован (никогда не читался), я все еще выгляжу там без дела.
Время простоя сбрасывается при считывании символа с входа терминала. Заблокированный ввод не обновляет время простоя, даже если он влияет на отображение экрана. Приложения могут обновляться по другим правилам. Например, я использовал write
который считывает ввод по строкам, поэтому он обновляет мое время простоя только после нажатия клавиши ввода. То же самое было верно для perl
(буквально исполняется как perl
без аргументов).
Процессы работают постоянно, и для простоя это не имеет значения.
Если вы выполните:
while true; do w; sleep 0.1; done
в одном терминале и открыв другой терминал, вы увидите, что время простоя этого другого сеанса сбрасывается до нуля, только когда пользователь что-то вводит (нажимает клавишу). Если вы запустите:
while true; do ls; done
в другом терминале время простоя будет увеличиваться.
Таким образом, только когда сеанс считывает вводимые пользователем данные, таймер простоя сбрасывается.