我想要的是,
-bash-3.2$ ps -aef | grep 29137
jeeadm 9794 1190 0 09:22 pts/2 00:00:00 grep 29137
jeeadm 29137 1 0 Sep02 ? 00:00:21 Java
第二行,第五列条目,因为在输出中它只显示日期,无论如何要获取完整的时间戳吗?
答案1
您可以使用该lstart
字段来实现此目的:
# ps -aefO lstart | head
PID STARTED S TTY TIME COMMAND
31379 Sat Aug 2 21:31:11 2014 S pts/3 00:00:00 zsh
31399 Sat Aug 2 21:31:11 2014 S pts/3 00:00:00 \_ vim
27313 Sat Aug 30 13:19:27 2014 S pts/4 00:00:20 zsh
27193 Sat Aug 30 13:18:11 2014 S pts/2 00:00:19 zsh
25196 Wed Sep 3 22:37:57 2014 S pts/16 00:00:00 zsh
25231 Wed Sep 3 22:38:00 2014 S pts/16 00:00:00 \_ sudo
25241 Wed Sep 3 22:38:04 2014 S pts/16 00:00:02 \_ zsh
24642 Sat Aug 30 12:50:48 2014 S pts/0 00:00:20 zsh
23366 Thu Sep 4 08:47:30 2014 S pts/18 00:00:00 zsh
答案2
尝试
ps -p 11517 -o stime
一天(午夜)后 ps 将显示开始日,而不是小时,
一个月后,你会得到星期一和年份,
一年后,您将开始一年。
答案3
要找出进程开始时的时间戳,您必须进行一些计算。使用这个命令:
echo "$(date +%s) - $(ps -o etime --no-headers -p $pid | \
awk -F'[:-]' '{print ($4+($3*60)+($2*60*60)+($1*24*60*60))}')" | bc -l
的值$pid
应该是进程ID。
解释:
echo "$(date +%s)
:打印现在的时间戳ps -o etime --no-headers -p $pid
:打印进程的运行时间,不带标题awk -F'[:-]'
:设置分隔符awk
to:
和,-
因为时间将以如下格式打印:dd-hh:mm:ss
'{print ($4+($3*60)+($2*60*60)+($1*24*60*60))}'
以秒为单位计算值bc -l
: 并将输出通过管道传输到bc
(timestamp_now - elapsed_seconds = timespamp_at_process_start
)
例如,我使用运行了 42 天的系统的 init 进程对其进行了测试。输出是1406124152
,即07 / 23 / 14 @ 2:02:31pm UTC
。