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 ))
좀 더 형식화된 날짜를 원할 경우 다른 답변을 사용하는 것이 더 쉬울 수 있지만, 다른 스크립팅 언어가 목표 달성에 도움이 될 수 있습니다(다른 방법도 있을 수 있음).
(당신이 원하는 것을 말하지 않았지만 다른 예를 들었습니다).