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).