반응형
Linux의 Python에서 프로세스 시작 시간 (또는 가동 시간)을 검색하는 방법은 무엇입니까?
"ps -p my_process_id -f"를 호출 한 다음 출력을 구문 분석 할 수 있습니다. 그러나 그것은 시원하지 않습니다.
해결 방법
측정하려는 Python 프로그램 내에서 수행하는 경우 다음과 같이 할 수 있습니다.
import time
# at the beginning of the script
startTime = time.time()
# ...
def getUptime():
"""
Returns the number of seconds since the program started.
"""
# do return startTime if you just want the process start time
return time.time() - startTime
그렇지 않으면 ps
를 구문 분석하거나 / proc / pid
로 이동할 수밖에 없습니다. 경과 시간을 얻는 좋은 bash
y 방법은 다음과 같습니다.
ps -eo pid,etime | grep $YOUR_PID | awk '{print $2}'
이렇게하면 경과 시간이 다음 형식으로 만 인쇄되므로 구문 분석이 매우 쉽습니다.
days-HH:MM:SS
(하루 미만으로 실행 된 경우 HH : MM : SS
입니다)
시작 시간은 다음과 같이 사용할 수 있습니다.
ps -eo pid,stime | grep $YOUR_PID | awk '{print $2}'
안타깝게도 프로세스가 오늘 시작되지 않은 경우 시간이 아닌 시작된 날짜 만 제공됩니다.
이를 수행하는 가장 좋은 방법은 경과 시간과 현재 시간을 가져 와서 약간의 수학을 수행하는 것입니다. 다음은 PID를 인수로 사용하고 위의 작업을 수행하여 프로세스의 시작 날짜와 시간을 인쇄하는 파이썬 스크립트입니다.
import sys
import datetime
import time
import subprocess
# call like this: python startTime.py $PID
pid = sys.argv[1]
proc = subprocess.Popen(['ps','-eo','pid,etime'], stdout=subprocess.PIPE)
# get data from stdout
proc.wait()
results = proc.stdout.readlines()
# parse data (should only be one)
for result in results:
try:
result.strip()
if result.split()[0] == pid:
pidInfo = result.split()[1]
# stop after the first one we find
break
except IndexError:
pass # ignore it
else:
# didn't find one
print "Process PID", pid, "doesn't seem to exist!"
sys.exit(0)
pidInfo = [result.split()[1] for result in results
if result.split()[0] == pid][0]
pidInfo = pidInfo.partition("-")
if pidInfo[1] == '-':
# there is a day
days = int(pidInfo[0])
rest = pidInfo[2].split(":")
hours = int(rest[0])
minutes = int(rest[1])
seconds = int(rest[2])
else:
days = 0
rest = pidInfo[0].split(":")
if len(rest) == 3:
hours = int(rest[0])
minutes = int(rest[1])
seconds = int(rest[2])
elif len(rest) == 2:
hours = 0
minutes = int(rest[0])
seconds = int(rest[1])
else:
hours = 0
minutes = 0
seconds = int(rest[0])
# get the start time
secondsSinceStart = days*24*3600 + hours*3600 + minutes*60 + seconds
# unix time (in seconds) of start
startTime = time.time() - secondsSinceStart
# final result
print "Process started on",
print datetime.datetime.fromtimestamp(startTime).strftime("%a %b %d at %I:%M:%S %p")
참조 페이지 https://stackoverflow.com/questions/2598145
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python : dict의 변수를 네임 스페이스로로드 (0) | 2020.12.07 |
---|---|
파이썬 matplotlib에서 쉼표를 사용하여 축 번호 형식을 천 단위로 어떻게 포맷합니까? (0) | 2020.12.07 |
파이썬 Numpy : 2 개의 실제 배열로 복잡한 배열을 만드시나요? (0) | 2020.12.07 |
파이썬 Python 스크립트 내에서 curl 명령 실행 (0) | 2020.12.07 |
파이썬 목록 항목의 발생 횟수를 어떻게 계산할 수 있습니까? (0) | 2020.12.07 |
댓글