프로세스가 완료된 후 실행하는 데 걸린 시간을 확인하는 방법은 무엇입니까?

프로세스가 완료된 후 실행하는 데 걸린 시간을 확인하는 방법은 무엇입니까?

현재 프로세스가 실제로 실행된 시간을 확인하기 위해 다음 명령을 사용하고 있습니다.

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

출력은 다음과 같습니다.

MY_ID PID_OF_PROCESS       00:16

그런데 프로세스가 끝난 후 실제로 실행하는데 얼마나 시간이 걸렸는지 알고 싶은데 해당 정보를 찾을 수 없는 것 같습니다.

답변1

프로세스가 완료된 후에는 그러한 정보를 얻는 것이 불가능하다고 생각합니다.

이 정보가 필요하다는 것을 미리 알고 있는 경우 다음 명령을 실행할 수 있습니다.

time <command>

예를 들어

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

답변2

유닉스 버전이 이를 지원하는지 확인하세요.프로세스 회계. 예를 들어 Ubuntu(및 대부분의 다른 Linux 배포판)에서는 다음과 같이 수행됩니다.acct 계정 설치 http://bit.ly/software-small. 회계 하위 시스템이 실행 중이면lastcomm사용된 프로세서 시간을 포함하여 완료된 프로세스에 대한 정보를 표시합니다(벽시계 시간은 기록되지 않음).

특정 프로그램의 타이밍이 필요한 경우,그것을 호출하여time.

보다 정확한 정보가 필요한 경우 고급 감사 패키지를 사용하세요.감사 하위 시스템리눅스에서.

답변3

이 질문과 답변을 보기 전에 저는 작은 bash 스크립트를 만들었습니다. 이는 루트 액세스 권한이 없고 acct가 설치되어 있지 않거나 명령을 직접 호출하지 않는 경우에도 여전히 유용합니다(제 경우에는 GUI를 사용하여 백그라운드 프로세스를 설정했습니다). 실행하기 전에 PID를 가져와야 합니다. (이것을 스크립트에 추가하는 데 관심이 있는 사람이 있습니까? :)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

이런 식으로 PROCESS_NAME의 PID를 찾습니다.

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

사실 스크립트를 명시적으로 만들기 위해 USER-ID와 PID를 결합해 보았지만 쉽지 않습니다... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'항상 작동하는 것은 아닌 것 같습니다...

관련 정보