我想知道正在运行的进程何时终止。我怎么看?


14

我想知道我可以运行的任何命令,以了解进程的结束时间。

我已经启动了该进程并知道它的PID,但是我想知道是否有任何命令可以告诉我它什么时候结束。

谢谢你的帮助。


7
有趣的问题。无论如何,下次您运行需要很长时间的命令时,请考虑使用at(请参阅联机帮助页:)man at。这会将其作为作业排队,并在完成时通知您,等等。这是非常基本的,类似于Cron的功能,但仅适用于一次作业。
gertvdijk 2013年

Answers:


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-您的代码不使用任何bashisms,因此/bin/sh在这里非常好。
理查德·汉森

1
@RichardHansen这个网站是关于Ubuntu的,这不是StackOverflow。
hytromo

@RichardHansen谢谢kill -0,我认为这是一个更优雅的解决方案。
埃里克·卡瓦略

@hakermania:我知道,这就是为什么我仍然给它+1。我只是指出了几种使脚本更具可移植性的方法,以防有人想要在BSD / Solaris / etc上执行相同的操作。系统。我相信,除非有理由做特定于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这不是一个选择。
埃里克·卡瓦略
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.