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


250

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


16
사용에 문제가 ps -p <pid> -o lstart있습니까? 그것이 효과가있는 것처럼 보이지만 왜이 질문이 나오는 것처럼 여러 번 즉각적인 대답이 아닌지 잘 모르겠습니다.
ajwood

7
@ajwood ps -p <pid> -o lstart=추가 라인 (헤더)이 인쇄되지 않도록 사용 하는 것이 좋습니다 .
블라디미르 프로 타 소프

2
사용에 문제가 ps -p <pid> -o lstart있습니까? 어쩌면 사실은 전혀 없다 lstart에 둘 다 2004 에디션 도에서 2013 POSIX의 1003.1 표준?
Piotr Dobrogost

5
@PiotrDobrogost, POSIX에 대한 질문이 있으면 문제가되지만 Linux에 대해서는 묻는 것입니다.
1'14

4
Mods-techraf, Makyen, David Rawson, Tsyvarev, Paul Roub-질문을 닫는 대신 StackExchange 또는 Superuser와 같은 더 적절한 사이트로 옮기지 않겠습니까? 이것은 좋고 유용한 질문입니다.
Hanxue

답변:


392

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 페이지확인할 수 있습니다 .


3
@ bobbyrne01 : 순서 변경, 예를 들어 pid, etime, cmd는 데비안 Wheezy에서 나를 위해 작동합니다.
exic

1
@Gobliins- etime프로세스가 시작된 이후 경과 된 시간입니다.
wkl

4
완성도, BSD 문법에 사용 된 것들 : ps axo pid,cmd,lstart또한 작동 함
Graeme Moss

2
@ bobbyme01 : -ww 옵션 사용
Ed Randall

1
lstart시간이 변경 될 수 있다는 점에 유의하십시오 . stat아래 방법은 더 안전합니다 -unix.stackexchange.com/questions/274610/…
slm 2016 년

43

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 $$"명령을 실행했습니다. .)


모든 프로세스 (그냥 자신되지 않음) 추가 참조하십시오 e(표준 ps구문) 또는 axps 명령에 (BSD 구문) 인수 : 즉, ps -ewo pid,lstart,cmdps -axwo pid,lstart,cmd
라이언 그리피스

15

의 후속으로 아담 마탄의 대답/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을 검색하십시오 .



1
내 데비안 8 VPS 이미지 의 기본값 인 strftime()systime()에 표시되지 않음 을 명심하십시오 . 따라서 이미지는 방언 에만 해당한다고 가정 할 수 있습니다 . mawkawkgawk
ssokolow

13
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

6
이것은 나를 위해 작동하지 않습니다-그것은 수정 시간을 인쇄합니다 (자주 변경) 아마 이것 때문에 : unix.stackexchange.com/questions/20460/…
user920391

/ proc / <pid>의 타임 스탬프가 신뢰할 수 없습니다.
Henning

1
이것은 내가 정보를 가지고있는 프로세스가 실제로 시작되었을 때보 다 9 분 후에 반환되었습니다.
Dan Dascalescu 2018 년

1
이것은 신뢰할 수는 없지만 작동하는 유일한 옵션 인 것 같습니다. 난 단지 비지 박스가 임베디드 시스템에있어 ps말한다 invalid option다른 답변에서 언급 한 모든 옵션을.
Qi Fan

7
grep? 왜 안돼 ls -ldh /proc/$pid? 아니면 더 나은 date -r /proc/$pid?
카이사르


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.