This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 textwidth=79 autoindent | |
""" | |
Python source code | |
Last modified: 12 Dec 2013 - 14:43 | |
Last author: Laban Mwangi | |
Calculates the start of a process based on it's /proc/pid/stat file and | |
the system uptime from /proc/uptime. | |
Rough hewn - No exception handling | |
Example: | |
# echo python pid_start.py -p $$ | |
python pid_start.py -p 8153 | |
# python pid_start.py -p $$ | |
Process 8153 started 1:05:28.800000 ago | |
Start time: 2013-12-12 13:56:39.081335 | |
""" | |
import optparse | |
import os | |
import sys | |
import datetime | |
def calc_pid_start_time (args): | |
pid = args.pid | |
clock_ticks = os.sysconf("SC_CLK_TCK") | |
start_time_after_boot = float(open("/proc/%d/stat" % pid).read().split()[21]) | |
seconds_since_boot = float(open("/proc/uptime").read().split()[0]) | |
start_time_seconds = seconds_since_boot - start_time_after_boot / clock_ticks | |
start_time_delta = datetime.timedelta(seconds=start_time_seconds) | |
print "Process %d started %s ago" % (pid, start_time_delta) | |
print "Start time: ", datetime.datetime.now() - start_time_delta | |
def main(): | |
"""Main function. Called when this file is a shell script""" | |
usage = "usage: %prog [options]" | |
parser = optparse.OptionParser(usage) | |
parser.add_option("-p", "--pid", dest="pid", | |
default="1", type="int", | |
help="PID of process") | |
(options, args) = parser.parse_args() | |
calc_pid_start_time(options) | |
if __name__ == '__main__': | |
main() |