実行中のプロセスがいつ終了するかを知りたい。どうすれば見ることができますか?


14

プロセスの終了時刻を知るために実行できるコマンドを知りたいです。

私はすでにプロセスを起動し、そのPIDを知っていますが、いつ終了したかを教えてくれるコマンドがあるかどうか知りたいです。

ご協力いただきありがとうございます。


7
興味深い質問。とにかく、次に時間がかかるコマンドを実行するときは、使用を検討してatください(マンページを参照してください:)man at。これはジョブとしてキューに入れられ、完了したときなどに通知されます。これは非常に基本的で、Cronに似ていますが、ジョブのシングルショット用です。
gertvdijk

回答:


11

これを実行します:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

または、bashスクリプトを作成できます。wait-for-death.sh

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

次に、実行許可を与えます。

chmod +x wait-for-death.sh

プロセスのPIDを渡して実行します。

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...より移植性が高く、Linux以外のシステムでも動作します。また、bashを使用する理由はありません。コードではbashismを使用しないため、/bin/shここでは問題ありません。
リチャードハンセン

1
@RichardHansenこのサイトはUbuntuに関するもので、これはStackOverflowではありません。
-hytromo

@RichardHansenありがとうkill -0、もっとエレガントなソリューションだと思う。
エリック

@hakermania:わかりました。だからこそ+1を与えました。誰かがBSD / Solaris /などで同じことをしたい場合に備えて、スクリプトの移植性を高めるためのいくつかの方法を指摘していました。システム。Ubuntu固有の何かをする理由がない限り、POSIXに固執するのは良い考えだと思います。この場合、POSIX準拠のスクリプトを作成しない理由はありません
リチャードハンセン

2

PIDの衝突を回避したい場合は、次を使用できますat

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

コマンドtimeはあなたのニーズに合っているかもしれません:

time [options] command [arguments...]

例:

time /local/usr/bin/myProcess arg1 arg2

プロセスtimeが完了すると、プロセスの完了にかかった時間(秒単位)のような統計が表示されます。

マニュアルページを確認するか、このオンラインマニュアルページをご覧ください


OPは、「すでにプロセスを開始している」と述べたためtime、オプションではありません。
エリックカルヴァ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.