如何通过ssh远程创建进程的时间?

时间:2011-10-08 02:20:40

标签: bash ssh

我目前正在编写一个脚本,其目的是杀死运行时间超过阈值的进程。 “杀手”在一堆主机上运行,​​作业由服务器发送到每个主机。我的想法是使用'ps'来获得作业的运行时间,但所有打印的都是

17433 17433? 00:00:00 python

无论我等待的时间。

我试图找到一个简化的例子,以避免发布我写的所有代码。我们称S为服务器,H为主机。

如果我执行以下步骤:

1)从服务器ssh登录@H 2)python myscript.py(现已登录主机) 3)ps -U登录(仍然在主机上)

就时间而言,我得到的结果与00:00:00之上的结果相同。

如何获得真正的执行时间?当我在我的机器上本地执行所有操作时,它可以正常工作。

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

或者,您可以在/ var / run中查看pid文件的创建,假设您的进程已创建一个并使用find命令查看它是否超过某个阈值:

find /var/run/ -name "myProcess.pid" -mtime +1d

如果符合条件,则返回文件名(最后修改至少1天前)。您可能还需要检查以确保进程实际正在运行,因为它可能已崩溃并将pid留在后面。

答案 1 :(得分:1)

试试这个:

ps kstart_time -ef | grep myProc.py | awk '{print $5}'

这将显示进程myProc.py的开始日期/时间:

[ 19:27 root@host ~ ]# ps kstart_time -ef | grep "httpd\|STIME" | awk '{print $5}'
STIME
19:25

另一个选项是etime

etime是自流程启动以来经过的时间,格式为dd-hh:mm:ss。 dd是天数; ......,小时数;毫米,分钟数; ss,秒数。

[ 19:47 root@host ~ ]# ps -eo cmd,etime
CMD        ELAPSED
/bin/sh    2-16:04:45

还有另一种方法:

获取进程pid并在/proc中的相应子目录中读取时间戳。

首先,使用ps命令(ps -efps aux)获取进程pid

然后,使用ls命令显示目录的创建时间戳。

[ 19:57 root@host ~ ]# ls -ld /proc/1218
dr-xr-xr-x 5 jon jon 0 Sep 20 16:14 /proc/1218

您可以从时间戳中看出流程1218在9月20日16:14开始执行。

答案 2 :(得分:1)

如果你想要这个过程有多长,你可以试试

stat -c %Y /proc/`pgrep python`

..它会在纪元时间回复给你。如果你想要一次性杀戮,我建议使用上面提到的发现(但也许指向/proc