是否有可能获得一个旧的正在运行的进程的开始时间?如果不是今天开始,ps似乎会报告日期(而不是时间),如果不是今年开始,ps只会报告年份。老工艺的精确度会永远消失吗?
当前回答
ps命令(至少是许多Linux发行版使用的procps版本)有许多与进程启动时间相关的格式字段,包括lstart,它总是给出进程启动的完整日期和时间:
# ps -p 1 -wo pid,lstart,cmd
PID STARTED CMD
1 Mon Dec 23 00:31:43 2013 /sbin/init
# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED CMD
root 1 0.0 0.1 2800 1152 ? Ss Mon Dec 23 00:31:44 2013 /sbin/init
root 5151 0.3 0.1 4732 1980 pts/2 S Sat Mar 8 16:50:47 2014 bash
有关如何在/proc文件系统中发布信息的讨论,请参见 https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running
(根据我在Linux下的经验,/proc/目录上的时间戳似乎与虚拟目录最近被访问的时间有关,而不是进程的开始时间:
# date; ls -ld /proc/1 /proc/$$
Sat Mar 8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151
注意,在这种情况下,我在大约16:50运行了“ps -p 1”命令,然后生成了一个新的bash shell,然后在该shell中运行“ps -p 1 -p $$”命令,随后不久....)
其他回答
你可以指定一个格式化程序并使用lstart,就像下面这个命令:
ps -eo pid,lstart,cmd
上面的命令将输出所有进程,使用格式化器获取PID、命令运行和启动日期+时间。
示例(来自Debian/Jessie命令行)
$ ps -eo pid,lstart,cmd
PID CMD STARTED
1 Tue Jun 7 01:29:38 2016 /sbin/init
2 Tue Jun 7 01:29:38 2016 [kthreadd]
3 Tue Jun 7 01:29:38 2016 [ksoftirqd/0]
5 Tue Jun 7 01:29:38 2016 [kworker/0:0H]
7 Tue Jun 7 01:29:38 2016 [rcu_sched]
8 Tue Jun 7 01:29:38 2016 [rcu_bh]
9 Tue Jun 7 01:29:38 2016 [migration/0]
10 Tue Jun 7 01:29:38 2016 [kdevtmpfs]
11 Tue Jun 7 01:29:38 2016 [netns]
277 Tue Jun 7 01:29:38 2016 [writeback]
279 Tue Jun 7 01:29:38 2016 [crypto]
...
您可以阅读ps的manpage或查看Opengroup的页面以获得其他格式化程序。
使用ls -ld /proc/process_id命令,其中process_id可以通过top命令找到
ls -ltrh /proc | grep YOUR-PID-HERE
例如,我的谷歌Chrome的PID是11583:
ls -l /proc | grep 11583
dr-xr-xr-x 7 adam adam 0 2011-04-20 16:34 11583
ps命令(至少是许多Linux发行版使用的procps版本)有许多与进程启动时间相关的格式字段,包括lstart,它总是给出进程启动的完整日期和时间:
# ps -p 1 -wo pid,lstart,cmd
PID STARTED CMD
1 Mon Dec 23 00:31:43 2013 /sbin/init
# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED CMD
root 1 0.0 0.1 2800 1152 ? Ss Mon Dec 23 00:31:44 2013 /sbin/init
root 5151 0.3 0.1 4732 1980 pts/2 S Sat Mar 8 16:50:47 2014 bash
有关如何在/proc文件系统中发布信息的讨论,请参见 https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running
(根据我在Linux下的经验,/proc/目录上的时间戳似乎与虚拟目录最近被访问的时间有关,而不是进程的开始时间:
# date; ls -ld /proc/1 /proc/$$
Sat Mar 8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151
注意,在这种情况下,我在大约16:50运行了“ps -p 1”命令,然后生成了一个新的bash shell,然后在该shell中运行“ps -p 1 -p $$”命令,随后不久....)
ps -eo pid,etime,cmd|sort -n -k2
推荐文章
- bash:错误的替换
- 如何在bash中删除字符后的所有文本?
- 将主机端口转发到docker容器
- 如何配置git bash命令行补全?
- 你能在Linux下运行Xcode吗?
- Linux上有对应的WinSCP工具吗?
- /bin/sh: apt-get:未找到
- 如何检索给定相对的绝对路径
- 图形化对?
- 我如何能匹配一个字符串与正则表达式在Bash?
- 为什么cURL返回错误“(23)Failed writing body”?
- 在Unix shell中计算一列数字
- 在bash脚本中否定if条件
- 如何撤消“set -e”使bash立即退出,如果任何命令失败?
- 如何在docker映像的新容器中运行bash ?