내가 원하는 것은,
-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는 시간 대신 시작일을 표시합니다.
한 달 후에는 월요일과 연도를 얻게 됩니다.
1년이 지나면 1년이 시작됩니다.
답변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
로 설정 하면 시간이 다음 형식으로 인쇄됩니다.:
-
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
.