Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何获取通过ssh远程创建的进程的时间?_Bash_Ssh - Fatal编程技术网

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

Bash 如何获取通过ssh远程创建的进程的时间?,bash,ssh,Bash,Ssh,我目前正在编写一个脚本,其目的是杀死一个运行时间超过阈值的进程。“killer”在一组主机上运行,作业由服务器发送到每台主机。我的想法是使用“ps”来获取作业的运行时间,但它打印的都是 1743317433?00:00:00 python 不管我什么时候等 我试图找到一个简化的示例,以避免发布我编写的所有代码。让我们调用服务器和主机 如果我执行以下步骤: 1) sshlogin@H从服务器 2) python myscript.py(现在已登录到主机) 3) ps-U登录(仍在主机上) 就时间而

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

1743317433?00:00:00 python

不管我什么时候等

我试图找到一个简化的示例,以避免发布我编写的所有代码。让我们调用服务器和主机

如果我执行以下步骤:

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

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

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

我非常感谢你的帮助

V.

试试这个:

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溶液,效果很好!