On Thu, 19 Nov 2009 06:21:09 -0800, Bas wrote:

> Below is the script I use to automatically kill firefox if it is not
> behaving, maybe you are looking for something similar.

> lines = os.popen('ps ax|grep firefox').readlines()

This isn't robust. It will kill any process with "firefox" anywhere in its
command line, which isn't limited to processes which are actually running
the firefox web browser.

> lines = [line for line in lines if 'grep' not in line]

This line excludes one such process, but there may be others.

A more robust approach would be to check for the string in the command
name (i.e. argv[0]) rather than the complete command-line, by using e.g.
"ps ... -o pid,comm": 

  lines = os.popen('ps axheo pid,comm').readlines()
  lines = [line.strip().split(' ', 1) for line in lines]
  lines = [(int(pid), cmd) for pid, cmd in lines if 'firefox' in cmd]

Better still would be to check that "firefox" is a complete word, not part
of one, e.g. with the regular expression r"\bfirefox\b". This would match
"firefox", "/usr/bin/firefox", "firefox-bin", etc, but not e.g.
"kill_firefox", e.g.:

  lines = [(int(pid), cmd) for pid, cmd in lines if re.search(r'\bfirefox\b', 
cmd)]

That's about as good as you can get without using non-portable mechanisms
such as /proc/*/exe.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to