Bash 如何获取通过ssh远程创建的进程的时间?
我目前正在编写一个脚本,其目的是杀死一个运行时间超过阈值的进程。“killer”在一组主机上运行,作业由服务器发送到每台主机。我的想法是使用“ps”来获取作业的运行时间,但它打印的都是 1743317433?00:00:00 python 不管我什么时候等 我试图找到一个简化的示例,以避免发布我编写的所有代码。让我们调用服务器和主机 如果我执行以下步骤: 1) sshlogin@H从服务器 2) python myscript.py(现在已登录到主机) 3) ps-U登录(仍在主机上) 就时间而言,我得到的结果与00:00:00以上的结果相同 如何获得实际执行时间?当我在我的机器上本地执行所有操作时,它工作正常 我非常感谢你的帮助 V.试试这个:Bash 如何获取通过ssh远程创建的进程的时间?,bash,ssh,Bash,Ssh,我目前正在编写一个脚本,其目的是杀死一个运行时间超过阈值的进程。“killer”在一组主机上运行,作业由服务器发送到每台主机。我的想法是使用“ps”来获取作业的运行时间,但它打印的都是 1743317433?00:00:00 python 不管我什么时候等 我试图找到一个简化的示例,以避免发布我编写的所有代码。让我们调用服务器和主机 如果我执行以下步骤: 1) sshlogin@H从服务器 2) python myscript.py(现在已登录到主机) 3) ps-U登录(仍在主机上) 就时间而
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是天数;hh,小时数;mm,分钟数;ss,秒数
[ 19:47 root@host ~ ]# ps -eo cmd,etime
CMD ELAPSED
/bin/sh 2-16:04:45
还有另一种方法: 获取进程pid并读取
/proc
中相应子目录中的时间戳
首先,使用ps命令(ps-ef
或ps 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开始执行。请尝试以下操作:
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是天数;hh,小时数;mm,分钟数;ss,秒数
[ 19:47 root@host ~ ]# ps -eo cmd,etime
CMD ELAPSED
/bin/sh 2-16:04:45
还有另一种方法: 获取进程pid并读取
/proc
中相应子目录中的时间戳
首先,使用ps命令(ps-ef
或ps 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开始执行。或者,您可以在/var/run中查看pid文件的创建,假设您的进程创建了一个pid文件,并使用find命令查看它是否超过某个阈值:
find /var/run/ -name "myProcess.pid" -mtime +1d
如果文件名符合条件(上次修改至少1天前),则返回文件名。您可能还需要检查以确保进程实际正在运行,因为它可能已崩溃并留下pid。或者,您可以在/var/run中查看pid文件的创建,假设您的进程创建了一个pid文件,并使用find命令查看它是否超过某个阈值:
find /var/run/ -name "myProcess.pid" -mtime +1d
如果文件名符合条件(上次修改至少1天前),则返回文件名。您可能还需要检查以确保该进程实际正在运行,因为它可能已崩溃并留下pid。如果您想知道该进程已存在多长时间,可以尝试
stat -c %Y /proc/`pgrep python`
…这将在大纪元的时候还给你。如果您希望一次性杀死,我建议使用上面提到的查找(但可能指向
/proc
)如果您想知道进程的生存时间,可以尝试
stat -c %Y /proc/`pgrep python`
…这将在大纪元的时候还给你。如果您希望一次性杀死,我建议使用上面提到的查找(但可能指向
/proc
)您可以使用ulimit运行每个进程吗?如果超过门槛,他们就会死。不需要杀死它们。@lhf我认为ulimit只能限制CPU时间,而不是进程启动后的总运行时间。@chown,我将“运行时间”解释为CPU时间…@lhf哦,是的,他说的是运行时间,嗯,你可能是对的。Lib,你能扔掉一些评论、回复、编辑或接受答案吗?我很想知道这是否/如何解决,这是一个有趣的想法。你能用ulimit运行每个进程吗?如果超过门槛,他们就会死。不需要杀死它们。@lhf我认为ulimit只能限制CPU时间,而不是进程启动后的总运行时间。@chown,我将“运行时间”解释为CPU时间…@lhf哦,是的,他说的是运行时间,嗯,你可能是对的。Lib,你能扔掉一些评论、回复、编辑或接受答案吗?我很想知道这是否/如何解决,这是一个有趣的想法。+1这将是我下一次编辑答案时的准确信息:)。+1这将是我下一次编辑答案时的准确信息:)。谢谢大家的回答!我用了Manny D溶液,效果很好!谢谢大家的回答!我用了Manny D溶液,效果很好!