Estou interessado em descobrir a última vez que um processo foi agendado para ser executado. Ou seja, há quanto tempo ele está dormindo, desde a última execução. Quando ele foi ativado pela última vez? Basicamente, uma generalização do que o w
comando imprime, mas para todos os processos, e não apenas para os shells de login.
Para tornar isso concreto: o w
comando imprime uma lista de sessões de usuários, quando eles efetuaram login e por quanto tempo ficaram inativos. Por exemplo:
$ w
17:17:04 up 10 days, 17:35, 2 users, load average: 0.28, 0.26, 0.30
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
linas tty7 :0 31Jan25 10days 13:27m 2.09s mate-session
linas pts/7 10.70.70.2 16:54 7:08 0.07s 0.07s -bash
Isso diz que linas
se conectou pts/7
há vinte e três minutos (17:17 menos 16:54) e digitou um pouco no teclado, queimando uma quantidade trivial de tempo de CPU, e então não fez nada por sete minutos e oito segundos. No kernel, o processo bash
está em suspensão interruptível, esperando por entrada do teclado, e tem sido assim por 7:08
mm:ss.
Como posso obter essas informações para todos os processos? Ou, se não estiver disponível, todos os ptys? Então, pts/1
embora /6
também tenham bash anexado a eles, mas eles estão... ociosos. Ninguém está digitando neles, agora.
Parece que o ps
comando deveria ser capaz de mostrar isso, mas não consigo descobrir. Talvez essa informação esteja, /proc/<pid>
mas se estiver, não está claro onde. Os chatbots do GPT/LLM, sem noção, não fornecem nada além de respostas erradas (insistindo em ps -o etime
qual é outra coisa completamente diferente).
O kernel não guarda essas informações para processos, elas não estão disponíveis.
O
w
comando obtém isso do timestamp no terminal em que o usuário está logado. Para terminais que estão em uso, mas não em uma sessão de login, você pode usar stat (1 ou 2) em cada pty para obter as mesmas informaçõesw
exibidas.Também seria tecnicamente possível pesquisar todos os processos para tempo de CPU usado e procurar aqueles em que esse número não está aumentando. Mas mesmo assim, um processo que só pega alguns ciclos de vez em quando pode parecer ocioso quando não está, e o tempo de CPU usado não aumentará rápido o suficiente para aparecer em ps.