Linux에서는 에서 커널이 시작된 후 프로세스가 시작된 시간을 나타내는 (22:nd) 필드를 /proc/PID/stat
얻을 수 있습니다 .start_time
에포크 형식 이후 이를 초로 변환하는 좋은 방법은 무엇입니까? 에 추가하시겠습니까 btime
?/proc/stat
기본적으로 내가 찾고 있는 것은나이정확한 시작 시간이 아닌 프로세스의 특정 시간입니다. 첫 번째 접근 방식은 start_time
조사 중인 프로세스를 현재 프로세스 start_time
(오랜 기간 동안 실행되지 않았다고 가정)와 비교하는 것입니다.
물론 더 좋은 방법이 있어야 합니다.
조사할 때 명백한 연령 관련 매개 변수를 찾지 못했습니다.https://www.kernel.org/doc/Documentation/filesystems/proc.txt
그래서 제가 현재 가지고 있는 것은 다음과 같습니다.
process age = (current_utime - ([kernel]btime + [process]start_time))
쉘 스크립트에 더 효율적인 대안이 있습니까? (일광 절약 시간이 변경되면 이상적으로 정확함)
답변1
버전 3.3.0부터 ps
Linux 에는 프로세스가 시작된 이후 경과된 시간(초)을 제공하는 출력 필드가 procps-ng
있습니다 etimes
. 그런데 이것이 프로세스가 마지막으로 명령을 실행한 이후의 시간과 반드시 연관되는 것은 아닙니다( if 존재한다면! ) (프로세스가 프로세스 이름에서 명령을 실행하는 시간)이므로 생각만큼 유용하지 않을 수 있습니다.
그래서 당신은 이것을 할 수 있습니다 :
ps -o etimes= -p "$pid"
Unix 에포크 시간 시작 시간의 경우( GNU 사용 date
):
(export TZ=UTC0 LC_ALL=C; date -d "$(ps -o lstart= -p "$pid")" +%s)
수정 시간은 사용할 수 없습니다 /proc/$pid
.이는 정확히 이러한 파일이 인스턴스화되는 시점입니다.이는 프로세스 시작 시간과는 아무런 관련이 없습니다.
답변2
프로세스 기간: 사람이 읽을 수 있는 형식
ps -p 1234 -o etime -h
1-02:03:04
에포크 이후 두 번째 프로세스
stat --format=%Y /proc/1234
나이로 두 번째
expr $(date +%s) - $(stat --format=%Y /proc/1234)
추가 리소스 ps(1)
,stat(1)