The only nice way I've found is:
import sys import os try: os.kill(int(sys.argv), 0) print "Running" except: print "Not running"
But is this reliable? Does it work with every process and every distribution?
I use this to get the processes, and the count of the process of the specified name
import os processname = 'somprocessname' tmp = os.popen("ps -Af").read() proccount = tmp.count(processname) if proccount > 0: print(proccount, ' processes running of ', processname, 'type')
i had problems with the versions above (for example the function found also part of the string and such things...) so i wrote my own, modified version of Maksym Kozlenko's:
#proc -> name/id of the process #id = 1 -> search for pid #id = 0 -> search for name (default) def process_exists(proc, id = 0): ps = subprocess.Popen("ps -A", shell=True, stdout=subprocess.PIPE) ps_pid = ps.pid output = ps.stdout.read() ps.stdout.close() ps.wait() for line in output.split("\n"): if line != "" and line != None: fields = line.split() pid = fields pname = fields if(id == 0): if(pname == proc): return True else: if(pid == proc): return True return False
I think it's more reliable, easier to read and you have the option to check for process ids or names.
Sligtly modified version of ShaChris23 script. Checks if proc_name value is found within process args string (for example Python script executed with python ):
def process_exists(proc_name): ps = subprocess.Popen("ps ax -o pid= -o args= ", shell=True, stdout=subprocess.PIPE) ps_pid = ps.pid output = ps.stdout.read() ps.stdout.close() ps.wait() for line in output.split("\n"): res = re.findall("(\d+) (.*)", line) if res: pid = int(res) if proc_name in res and pid != os.getpid() and pid != ps_pid: return True return False