剧本什么时候开始写?

剧本什么时候开始写?

我想要的是,

-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'[:-]':设置分隔符awkto:和,-因为时间将以如下格式打印: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

相关内容