source

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

ittop 2023. 5. 27. 12:00
반응형

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

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

포맷터를 지정하고 사용할 수 있습니다.lstart다음 명령처럼:

ps -eo pid,lstart,cmd

위의 명령은 PID, 명령 실행 및 date+time started를 가져오는 형식을 가진 모든 프로세스를 출력합니다.

예제(Debian/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의 manpage 또는 Opengroup의 페이지에서 다른 형식을 확인합니다.

ps 명령(적어도 많은 리눅스 배포판에서 사용되는 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

/dll 파일 시스템에 정보가 게시되는 방법에 대한 자세한 내용은 https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running 을 참조하십시오.

(Linux 환경에서의 경험에 따르면 /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부팅 후 시계 눈금으로 시작 시간을 가져옵니다.

이 장치는 사용하기에 약간 까다로운 장치입니다. 자세한 내용은 jiffies를 초 단위로 변환을 참조하십시오.

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

코멘트에 있는 스테판 샤젤라스의 몇 가지 수정 사항으로 업데이트되었습니다. 항상 감사합니다!

만약 당신이 모크만 가지고 있다면, 시도해 볼 수도 있습니다.

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 manproc; 시작 시간을 검색합니다.

ls -ltrh /proc | grep YOUR-PID-HERE

예를 들어 Google Chrome의 PID는 11583입니다.

ls -l /proc | grep 11583
dr-xr-xr-x  7 adam       adam                     0 2011-04-20 16:34 11583
$ ps -p 182454 -o lstart=
Mon Oct 18 17:26:44 2021

하지만 제가 몇 초 안에 답을 얻을 수 있을까요?

    ps -eo pid,cmd,lstart | grep YOUR-PID-HERE
 ps -eo pid,etime,cmd|sort -n -k2

ls -ld /sys/process_id 명령을 사용합니다. 여기서 process_id는 top 명령을 사용하여 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/5731234/how-to-get-the-start-time-of-a-long-running-linux-process

반응형