장기간 실행되는 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 @{}
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
'source' 카테고리의 다른 글
변수가 정수인지 확인하는 중 (0) | 2023.06.01 |
---|---|
Ruby/Rails: 날짜를 UNIX 타임스탬프로 변환 (0) | 2023.06.01 |
UIButton의 텍스트 정렬 센터를 만드는 방법은 무엇입니까?IB 사용 (0) | 2023.05.27 |
jQuery에서 여러 CSS 속성을 어떻게 정의합니까? (0) | 2023.05.27 |
시스템.Linq.Dynamic이 OrderByDescending("일부 열")을 지원하지 않습니까? (0) | 2023.05.27 |