Thursday, December 12, 2013

Calculating the start time of a process

A quick script that calculate the start time of a process in Linux:

#!/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()
view raw pid_start.py hosted with ❤ by GitHub