さまざまなオペレーティングシステムでプロセスの稼働時間を取得する方法は?

さまざまなオペレーティングシステムでプロセスの稼働時間を取得する方法は?

Linuxでは、以下を使用して数秒でプロセスの稼働時間を取得できます。

echo $(($(cut -d "." -f1 /proc/uptime) - $(($(cut -d " " -f22 /proc/$PID/stat)/100))))

しかし、他のオペレーティングシステムからどのように入手できますか?例:SunOS、HP-UX、AIX?

答え1

POSIX 互換システムでは、etime次の列を使用できます。ps

LC_ALL=POSIX ps -o etime= -p $PID

構文を使用して、出力を日、時間、分、秒で区切ります[[dd-]hh:]mm:ss。単純な算術を使用して秒単位に戻すことができます。

t=$(LC_ALL=POSIX ps -o etime= -p $PID)
d=0 h=0
case $t in *-*) d=$((0 + ${t%%-*})); t=${t#*-};; esac
case $t in *:*:*) h=$((0 + ${t%%:*})); t=${t#*:};; esac
s=$((10#$d*86400 + 10#$h*3600 + 10#${t%%:*}*60 + 10#${t#*:}))

答え2

echo $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID) ))

/procこれはファイルシステムを持つすべてのシステムで機能します。残念ながら、テストする方法はありません。

答え3

すべてのシステムで動作するコマンドがあるかどうかはわかりませんが、次のものを使用できます。Unix ロゼッタストーン各システムにコマンドを翻訳します。

答え4

私はLinux(おそらくすべてのバージョン)とSolaris(少なくとも5.9)で動作するツールを見つけました。これをテストするために他のオペレーティングシステムにアクセスできず、ドキュメントを確認する必要もありません :)

boottime=$(who -b | awk '/ /{print $3 " " $4}')")

はシステムの起動時間をyyyy/mm/dd HH:MM:SS形式なので、epoch秒に変換すると次のようになります。

bootepoc=date -d "$boottime" +%s

秒単位の時間は、明らかに現在のエポック時間からその時間を引いたものです。$(( $(date +%s) - $bootepoc ))

よりフォーマットされた日付が必要な場合は、他の回答を使用する方が簡単ですが、他のスクリプト言語が目標を達成するのに役立ちます(他の方法もあります)。

(あなたが望むことを言わなかったが、他の例を挙げた)。

関連情報