システムのクロック設定に基づかないWindowsプロセスから稼働時間を取得することは可能ですか?
Linuxベースのソリューションは次のようなものです。
ps -eo comm,etime
いくつかの調査で、私はWindowsでいくつかのことを試しましたが、期待していたものが見つかりませんでした。たとえば、次を使用します。
New-TimeSpan -Start (get-process Explorer).StartTime
powerShellでは、次のようになりました。
私の問題は、時刻が作成日に基づいているため、何らかの理由で時計の設定を変更すると、結果が次のように変わることです。
(ちなみに私はマイナスの稼働時間が好きです)
また、wmicも調べましたが、問題は同じです。
WMIC PROCESS GET NAME, CREATIONDATE
Etimeのような実時間情報を取得するためのフィールドまたはオプションはありますか?
ありがとう
Cygwinのps
は、現在の時刻への変更を無視します。
欠点:
出力例(日付を変更する前):
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は、Windowsプロセスも処理できるが、これらすべてのオプションをサポートしているわけではないカスタムpsプログラムを使用します。
ただし、procps
は-o
をサポートします。
欠点: