[linux] 장기간 실행되는 Linux 프로세스의 시작 시간을 얻는 방법은 무엇입니까? [닫은]

이전 실행 프로세스의 시작 시간을 얻을 수 있습니까? 것 같다 ps올해 시작하지 않은 경우 오늘 시작하지 않은 경우 날짜 (시간이 아니라), 만 년을보고합니다. 오래된 프로세스에서 정밀도가 영원히 손실됩니까?



답변

lstart다음 명령과 같이 포맷터를 지정하고을 사용할 수 있습니다 .

ps -eo pid,lstart,cmd

위의 명령은 PID, 명령 실행 및 날짜 + 시간 시작을 얻기 위해 포맷터와 함께 모든 프로세스를 출력합니다.

예 (데비안 / 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의 맨 페이지를 읽 거나 다른 포매터에 대해서는 Opengroup 페이지확인할 수 있습니다 .


답변

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 파일 시스템에 게시되는 방법에 대한 자세한 내용은 /unix/7870/how-to-check-how-long-a-process-has-been-running을 참조
하십시오.

(리눅스에서의 경험에서 / 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 셸을 생성 한 다음 바로 그 셸 내에서 “ps -p 1 -p $$”명령을 실행했습니다. .)


답변

의 후속으로 아담 마탄의 대답/proc/<pid>같은 디렉토리의 타임 스탬프는 반드시 직접 도움이되지 않습니다,하지만 당신은 사용할 수 있습니다

awk -v RS=')' 'END{print $20}' /proc/12345/stat

시스템 부팅 이후 시작 시간을 시계 틱으로 표시합니다. 1

이것은 약간 까다로운 단위입니다. 자세한 내용은 지프를 초로 변환 을 참조하십시오.

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { printf "%9.0f\n", now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat

이것은 strftime()(사람이 읽을 수있는 또는 다른 방식으로) 타임 스탬프를 얻기 위해 전달할 수있는 초를 제공해야합니다 .

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/12345/stat

주석에서 Stephane Chazelas의 일부 수정 사항으로 업데이트되었습니다. 언제나처럼 감사합니다!

Mawk 만있는 경우 시도해보십시오.

awk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" '
  NR==1 { now=$1; next }
  END { printf "%9.0f\n", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}

1 명의 남자 proc ; starttime을 검색하십시오 .


답변

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 -eo pid,etime,cmd|sort -n -k2


답변

    ps -eo pid,cmd,lstart | grep YOUR-PID-HERE


답변