다양한 운영 체제에서 프로세스 가동 시간을 얻는 방법은 무엇입니까?

다양한 운영 체제에서 프로세스 가동 시간을 얻는 방법은 무엇입니까?

Linux에서는 다음을 사용하여 몇 초 만에 프로세스 가동 시간을 얻을 수 있습니다.

echo $(($(cut -d "." -f1 /proc/uptime) - $(($(cut -d " " -f22 /proc/$PID/stat)/100))))

하지만 다른 운영 체제에서 어떻게 얻을 수 있습니까? 예: SunOS, HP-UX, AIX?

답변1

POSIX 호환 시스템에서는 etime다음 열을 사용할 수 있습니다.ps.

LC_ALL=POSIX ps -o etime= -p $PID

구문을 사용하여 출력을 일, 시간, 분, 초로 구분합니다 [[dd-]hh:]mm:ss. 간단한 산술을 사용하여 초 단위로 되돌릴 수 있습니다.

t=$(LC_ALL=POSIX ps -o etime= -p $PID)
d=0 h=0
case $t in *-*) d=$((0 + ${t%%-*})); t=${t#*-};; esac
case $t in *:*:*) h=$((0 + ${t%%:*})); t=${t#*:};; esac
s=$((10#$d*86400 + 10#$h*3600 + 10#${t%%:*}*60 + 10#${t#*:}))

답변2

echo $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID) ))

/proc이는 파일 시스템이 있는 모든 시스템에서 작동합니다 . 불행히도 테스트할 방법이 없습니다.

답변3

모든 시스템에서 작동하는 명령이 있는지는 모르겠지만 다음을 사용할 수 있습니다.유닉스 로제타스톤각 시스템에 명령을 번역합니다.

답변4

Linux(아마도 모든 버전) 및 Solaris(최소 5.9)에서 작동하는 도구를 찾았습니다. 이를 테스트하기 위해 다른 운영 체제에 액세스할 수 없으며 문서를 확인할 필요도 없습니다 :)

boottime=$(who -b | awk '/ /{print $3 " " $4}')")

는 시스템이 시작된 시간을 yyyy/mm/dd HH:MM:SS 형식이므로 epoch 초로 변환하면 다음과 같습니다.

bootepoc=date -d "$boottime" +%s

초 단위의 시간은 분명히 현재 에포크 시간에서 해당 시간을 뺀 값입니다.$(( $(date +%s) - $bootepoc ))

좀 더 형식화된 날짜를 원할 경우 다른 답변을 사용하는 것이 더 쉬울 수 있지만, 다른 스크립팅 언어가 목표 달성에 도움이 될 수 있습니다(다른 방법도 있을 수 있음).

(당신이 원하는 것을 말하지 않았지만 다른 예를 들었습니다).

관련 정보