システムのクロック設定に基づかない Windows プロセスから稼働時間を取得することは可能ですか?
Linux ベースのソリューションは次のようになります。
ps -eo comm,etime
いくつか調査して、Windows でいくつか試してみましたが、期待したものは見つかりませんでした。たとえば、以下を使用します。
New-TimeSpan -Start (get-process explorer).StartTime
PowerShell では、次のようになりました:
私の問題は、時間が作成日に基づいているため、何らかの理由で時計の設定が変更されると、結果が次のように変わることです。
(ちなみに、私はマイナスの稼働時間が好きです)
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 プロセスは処理しません。