Monitorando o tempo de parede de um processo no Windows?

2

O Gerenciador de Tarefas do Windows tem a capacidade de mostrar o tempo atual da CPU de qualquer processo em execução no Windows, existe alguma maneira (não necessariamente através do Gerenciador de Tarefas) para obter o tempo de parede atual de um processo?

Um exemplo, digamos que eu tenha um script que seja executado com segurança por cerca de 45 minutos. Sem adicionar uma barra de progresso ao script, existe alguma maneira de descobrir quanto tempo está sendo executado?

A matemática por trás disso parece bastante direta;

WallTime = CurrentWallTime - WallTimeProcessStarted.

Da mesma forma, como a matemática é tão simples, existe alguma maneira de obter o tempo em que o processo foi iniciado?

    
por Sean Madden 19.10.2012 / 18:41

2 respostas

1

Se você deseja / pode usar o Python, existe algo chamado psutil que provavelmente funcionaria. Como alternativa, você pode fazer o download do código-fonte e ver quais chamadas da API do Windows está sendo usada para fornecer as informações.

    
por 19.10.2012 / 19:23
1

Claro. O tempo total decorrido está disponível através da seção de desempenho do Registro e da API Toolhelp. E, claro, se você tiver o tempo decorrido e a hora atual, você pode calcular a hora de início.

Existem duas maneiras de recuperar as informações através do Win32, mas nenhuma delas é particularmente simples. A maneira que tem sido suportada desde as versões mais antigas do WinNT é usar o RegQueryValueEx para analisar primeiro a lista de contadores disponíveis em HKEY_PERFORMANCE_DATA e, em seguida, recuperar aqueles que você deseja nas instâncias de processo de interesse. Uma maneira mais recente é usar CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS), que foi introduzido com o WinXP.

Provavelmente, há muitos aplicativos que podem fazer isso, por isso, você está convidando uma lista que tenho certeza de que outras pessoas podem adicionar. Aqui está como eu fiz isso no meu shell C . ps -s lista todos os processos do sistema. O utilitário de amostra uptime calcula quanto tempo o sistema ficou acima do tempo decorrido relatado por ps -s para o processo Ocioso.

(O tempo ativo do Idle é simplesmente o valor ímpar relatado pelo Win7.)

    
por 19.10.2012 / 19:14