コマンドラインでWindowsプロセスの実時間を取得する

コマンドラインでWindowsプロセスの実時間を取得する

システムのクロック設定に基づかない Windows プロセスから稼働時間を取得することは可能ですか?

Linux ベースのソリューションは次のようになります。

ps -eo comm,etime

いくつか調査して、Windows でいくつか試してみましたが、期待したものは見つかりませんでした。たとえば、以下を使用します。

New-TimeSpan -Start (get-process explorer).StartTime

PowerShell では、次のようになりました:

https://i.stack.imgur.com/uNF7y.png

私の問題は、時間が作成日に基づいているため、何らかの理由で時計の設定が変更されると、結果が次のように変わることです。

https://i.stack.imgur.com/cIR9W.png

(ちなみに、私はマイナスの稼働時間が好きです)

wmic も調べてみましたが、問題は同じでした。

WMIC PROCESS GET NAME, CREATIONDATE

etime のようなウォールタイム情報を取得するためのフィールドまたはオプションはありますか?

ありがとう

答え1

システムのクロック設定に基づかない Windows プロセスから稼働時間を取得することは可能ですか?

Cygwin はps現在の時刻の変更を無視します。

欠点:

  • STIME フィールドには開始時刻が hh:mm:ss 形式で表示されるため、実行されている日数を確認することはできません。

出力例(日付変更前):

DavidPostill@Hal ~
$ date
Fri, Jul 17, 2015  9:59:11 AM

DavidPostill@Hal ~
$ ps -e -W -p 2612
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     2612       0       0       2612  ?          0 16:51:33 C:\Windows\explorer.exe

出力例(日付変更後):

DavidPostill@Hal ~
$ date
Fri, Jul 17, 2015 11:59:29 AM

DavidPostill@Hal ~
$ ps -e -W -p 2612
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     2612       0       0       2612  ?          0 16:51:33 C:\Windows\explorer.exe

の値はSTIME変更されません -16:51:33

ノート:

  • 16:51:33昨日マシンを再起動した時間です。
  • このSTIMEフィールドには開始時刻が形式で表示されるhh:mm:ssため、実行されている日数を確認することはできません。

Cygwin ps には出力をフォーマットするためのオプション -o がありません

Cygwin は、Windows プロセスも処理できるカスタム ps プログラムを使用しますが、すべてのオプションをサポートしているわけではありません。

ただし、procpsをサポートします-o

欠点:

  • STIME フィールドには開始時刻が hh:mm:ss 形式で表示されるため、実行されている日数を確認することはできません。
  • Windows プロセスは処理しません。

関連情報