
특정 Linux 프로세스의 가동 시간을 어떻게 찾을 수 있습니까?
ps aux | grep gedit | grep -v grep
프로세스가 시작된 시간을 포함하여 많은 정보를 제공합니다. 특히 프로세스 가동 시간을 밀리초 단위로 반환하는 스위치를 찾고 있습니다.
감사해요
답변1
"가동 시간"에는 여러 가지 의미가 있으므로 여기에 유용한 명령이 있습니다.
ps -eo pid,comm,lstart,etime,time,args
이 명령은 여러 가지 시간 관련 열이 있는 모든 프로세스를 나열합니다. 여기에는 다음과 같은 열이 있습니다.
PID COMMAND STARTED ELAPSED TIME COMMAND
PID
= 프로세스 ID
우선 COMMAND
= 옵션과 인수가 없는 명령 이름만
STARTED
= 프로세스가 시작된 절대 시간
ELAPSED
= 프로세스가 시작된 이후 경과된 시간(벽시계 시간), 형식 [[dd-]hh:]mm:ss
TIME
= 누적 CPU 시간, "[dd-]hh:mm:ss" 형식
두 번째 COMMAND
= 다시 명령, 이번에는 제공된 모든 옵션 및 인수 포함
답변2
ps
에 있는 것과 같은 제한된 버전이 있는 경우 busybox
의 타임스탬프를 보고 프로세스 시작 시간을 얻을 수 있습니다 /proc/<PID>
. 예를 들어 보고 싶은 pid가 55라면...
# ls -al /proc | grep 55
dr-xr-xr-x 7 root root 0 May 21 05:53 55
...그리고 현재 날짜와 비교해 보세요...
# date
Thu May 22 03:00:47 EDT 2014
답변3
나는 당신이 실행할 수 있다고 생각합니다 :
$ stat /proc/1234
1234는 프로세스 ID입니다.
두 프로세스가 동일한 시간, 분, 초에 시작되었지만 동일한 밀리초는 아닌 예:
$ stat /proc/9355
...
Access: 2017-11-13 17:46:39.778791165 +0100
Modify: 2017-11-13 17:46:39.778791165 +0100
Change: 2017-11-13 17:46:39.778791165 +0100
$ stat /proc/9209
...
Access: 2017-11-13 17:46:39.621790420 +0100
Modify: 2017-11-13 17:46:39.621790420 +0100
Change: 2017-11-13 17:46:39.621790420 +0100
답변4
이런 간단한 일이 5년이 지나도 제대로 답이 안 나오나요?
밀리초를 정확하게 얻을 수는 없다고 생각합니다. 예. "시계 틱"에 있는 시작 시간으로 필드 22가 있는 것을 보고 확인하면 man procfs
더 /proc/$$/stat
정확한 것을 얻을 수 있지만 시계 틱은 완벽하게 일정한 속도('벽시계 시간'에 비해)로 진행되지 않으며 꺼져... 잠을 자고 어떤 것(내 생각엔 ntpd)이 그것을 상쇄합니다. 예를 들어 가동 시간이 8일이고 잠을 자지 않은 ntpd를 실행하는 머신에서 dmesg -T
동일한 문제가 발생하며(제 생각에는...) 여기에서 확인할 수 있습니다.
# date; echo h > /proc/sysrq-trigger; dmesg -T | tail -n1 ; date
Fri Mar 3 10:26:17 CET 2017
[Fri Mar 3 10:26:16 2017] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w)
Fri Mar 3 10:26:17 CET 2017
초는 다음과 같습니다.
# example pid here is just your shell
pid=$$
# current unix time (seconds since epoch [1970-01-01 00:00:00 UTC])
now=$(date +%s)
# process start unix time (also seconds since epoch)
# I'm fairly sure this is the right way to get the start time in a machine readable way (unlike ps)...but could be wrong
start=$(stat -c %Y /proc/"$pid")
# simple subtraction (both are in UTC, so it works)
age=$((now-start))
printf "that process has run for %s seconds\n" "$age"