명령줄에서 프로세스 기간 가져오기

명령줄에서 프로세스 기간 가져오기

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부터 psLinux 에는 프로세스가 시작된 이후 경과된 시간(초)을 제공하는 출력 필드가 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)

관련 정보