7
from optparse import OptionParser
8
from subprocess import Popen, PIPE
11
COMMAND_FORMAT = "pgrep -f %(options)s %(process)s"
14
def process_pids(process, *options):
15
options_string = " ".join(options)
16
command = COMMAND_FORMAT % {"options": options_string, "process": process}
18
# Exclude this process and the pgrep process
20
command, stdout=PIPE, shell=True, universal_newlines=True)
21
exclude_pids = [os.getpid(), os.getppid(), subprocess.pid]
23
pids_string = subprocess.communicate()[0]
24
pids = [int(pid) for pid in pids_string.split()]
26
result = set(pids).difference(exclude_pids)
30
def process_count(*args):
31
return len(process_pids(*args))
37
usage = "Usage: %prog PROCESS [PROCESS...]"
38
parser = OptionParser(usage=usage)
39
parser.add_option("-s", "--sleep",
41
default=default_sleep,
42
help="Number of seconds to sleep between checks.")
43
parser.add_option("-t", "--timeout",
45
help="Number of seconds to timeout from sleeping.")
46
parser.add_option("-u", "--uid",
47
help="Effective user name or id of the running processes")
48
(options, processes) = parser.parse_args(args)
51
if options.uid is not None:
52
process_args.extend(["-u", options.uid])
55
for process in processes:
56
if process_count(process, *process_args):
61
if options.timeout is not None:
62
if options.timeout <= 0:
65
options.timeout -= options.sleep
67
time.sleep(options.sleep)
72
if __name__ == "__main__":
73
sys.exit(main(sys.argv[1:]))