모니터링 애플리케이션에서 프로세스를 시작하여 이 작업을 방지하고 싶습니다.
답변1
ps
from을 사용하는 Linux procps(-ng)
(및 POSIX에서 지정하는 대부분의 다른 시스템):
ps -o etime= -p "$$"
$$
확인하려는 프로세스의 PID는 어디에 있습니까? 그러면 경과 시간이 형식으로 반환됩니다 [[dd-]hh:]mm:ss
.
경과 시간만 -o etime
알려주는 필드 와 그 끝에 억제 헤더를 사용하십시오(그렇지 않은 경우 한 줄이 표시되고 다음 줄에는 시간이 표시됩니다. 를 사용하면 한 줄만 표시됩니다. 시간).ps
=
ELAPSED
또는 Linux 또는 FreeBSD 9.0 이상(및 기타 버전)에서 최신 버전의 procps-ng 도구 모음(3.3.0 이상)의 경우 다음을 사용하세요.
ps -o etimes= -p "$$"
(추가됨 s
) 시간을 초 단위로 형식화하여 스크립트에서 더 유용하게 사용합니다.
Linux에서 ps
프로그램은 이 정보를 에서 가져옵니다 /proc/$$/stat
. 여기서 필드 중 하나( 참조 man proc
)는 프로세스 시작 시간입니다. 불행하게도 이는 시스템 부팅 이후 jiffies 시간으로 지정됩니다(Linux 커널에서 사용되는 임의의 시간 카운터). 따라서 시스템이 시작된 시간 /proc/stat
, 시스템의 초당 jiffies 수를 확인한 다음 유용한 형식으로 경과 시간을 얻기 위해 수학을 수행해야 합니다.
HZ(즉, 초당 jiffies) 값을 찾는 것은 매우 복잡합니다. procps 패키지의 주석에 따르면 sysinfo.c
A) 커널 헤더를 포함하고 다른 커널을 사용할 때 다시 컴파일하거나, B) sysconf()
불행하게도 C 라이브러리에 컴파일된 하드코딩된 값을 사용하는 posix 함수를 사용하거나, C) 커널에 물어볼 수 있습니다. 하지만 이를 수행할 수 있는 공식 인터페이스는 없습니다. 따라서 코드는 ps
올바른 값을 결정하는 데 사용되는 일련의 패치워크로 구성됩니다. 우와.
ps
이제 매우 편리하게 모든 작업이 완료되었습니다. :)
(노트:stat -c%X /proc/$$
작동하지 않습니다. 바라보다관련 질문에 대한 Stéphane Chazelas의 답변.)
답변2
가지고 다닐 수 있는:
% ps -o stime,time $$
STIME TIME
Jan30 00:00:06
즉, 1월 30일에 쉘이 시작되어 CPU 시간을 총 6초 정도 차지했습니다.
이 정보를 얻는 데는 더 정확하고 구문 분석이 가능하지만 이식성이 떨어지는 방법이 있을 수 있습니다. ps
명령이나 파일 시스템에 대한 설명서를 확인하십시오 proc
.
Linux에서 이 정보는 다음 위치에 있습니다./proc/$pid/stat
.
awk '{print "CPU time: " $14+$15; print "start time: " $22}' /proc/$$/stat
CPU 시간은 jiffies 단위입니다. 쉘에서 jiffy 값을 찾는 방법을 모르겠습니다. 시작 시간은 시작 시간과 관련됩니다( 에서 찾을 수 있음 /proc/uptime
).
답변3
프로세스의 PID를 모르는 경우 이름만 알 수 있습니다.
ps -eo pid,comm,cmd,start,etime | grep -i <name of the process>
PID를 알고 있는 경우:
ps -o pid,comm,cmd,start,etime -p <PID>
답변4
아직 제안 사항이 없는 이유를 잘 모르겠습니다.리눅스에서stat()
/proc/[nnn] 디렉토리에서 PID를 찾을 수 있습니다 .
이 동작은 프로세스 시작 시간을 반환하도록 명시적으로 설계되었으며 고해상도에서 이를 수행할 수 있으며 커널은 (분명히) 관련 정보를 간단히 확인할 수 있기 때문에 해킹 없이 정확하게 수행할 수 있습니다. 액세스, 데이터 수정 및 상태 변경 필드는 모두 프로세스 시작 시간을 반환합니다.
무엇보다도, stat(1)
이를 쉘에서 사용 하거나 stat(2)
$favorite_programming_언어의 적절한 바인딩과 함께 사용할 수 있으므로 외부 프로세스를 시작할 필요조차 없습니다.
노트이것은 실제로아니요/usr/compat/linux/proc
FreeBSD에서 작동합니다. 반환된 액세스/수정/상태 변경 시간은 현재 시간이고 생성 시간은 UNIX 시대입니다. 저에게 묻는다면 지원을 제공하지 않는 것이 어리석은 일입니다.