Estou tentando escrever um script que pode monitorar o uso da CPU de um processo por um intervalo (para criar um gráfico).
Até agora, este é o comando que estou usando
ps -p $PROCID -o cputime,etimes
Minha única preocupação é que a saída do cputime pareça ser [dd]hh:mm
(ou algo semelhante, não consigo me lembrar da cabeça agora)
Existe uma maneira de formatar o cputime em segundos, como etime -> etimes para obter o tempo decorrido em segundos?
Edit: Esta é a saída que estou recebendo no momento
2-03:01:33 2653793
Gostaria que o primeiro parâmetro fosse formatado em segundos, não em dias-horas: minutos: segundos.
bash
ps
text-formatting
dreadiscool
fonte
fonte
Respostas:
Isso converte a primeira vez em segundos:
Como exemplo, o comando ps produz:
O
awk
comando processa isso e retorna:Explicação
-F'[: ]+'
Isso indica ao awk para tratar dois pontos e espaços como separadores de campo. Dessa forma, as horas, minutos e segundos aparecem como campos separados.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
A inicial
/:/
restringe o código a trabalhar apenas em linhas que incluem dois pontos. Isso remove as linhas do cabeçalho. O número de segundos é calculado a partir de horas, minutos, segundos viat=$3+60*($2+60*$1)
. O valor resultante parat
é impresso ao lado do tempo decorrido.Dias de manipulação
Se
ps
produz dias, horas, minutos, segundos, como em:Em seguida, use este código:
Se os dias puderem ou não ser anexados à saída, use este comando de combinação:
fonte
Se você não deseja trazer awk no jogo, uma solução pura para o bash (t_str contém a string formatada, t_sec o tempo decodificado em segundos):
fonte
Você não especifica para qual sistema operacional é; se for Linux, e se você estiver interessado em monitorar um processo específico, talvez seja mais interessante analisá-lo
/proc/$PROCID/stat
- consulte aproc(5)
página do manual para obter detalhes.fonte