calling a program without waiting for it to finish

Donn Cave donn at
Fri Mar 21 05:29:08 CET 2003

Quoth Alex Martelli <aleax at>:
| You can take specific, platform-dependent action to terminate such
| processes in a function run at your Python program's termination
| (see standard library module atexit).  E.g., killall will work on some
| systems for such purposes.

For example,

  import os
  import signal
  import time

  os.spawnv(os.P_NOWAIT, '/bin/ping', ['ping', ''])
  signal.signal(signal.SIG_IGN, signal.SIGHUP)
  os.kill(-os.getpid(), signal.SIGHUP)

-  spawnv() invokes the specified command directly without a shell,
   which is particularly advantageous when the command is calculated
   from input data and therefore not reliably safe from shellisms
   that could radically affect your command.
-  The above works only when the python script was started directly
   from an interactive shell, in which case (assuming Berkeley job
   control) it will be a process group leader - running in its own
   process group, with process group ID == process ID.  Any process
   forked by the python script will belong to that same process group.
-  kill(-n, x) means send signal x to process group n.  I expect that
   may be enshrined in POSIX 1003.1, don't know for sure though.
-  signal(SIG_IGN,) is to survive my own signal.
-  You can use setpgrp() to effect more elaborate process control,
   but not often will it be worth the trouble.

	Donn Cave, donn at

More information about the Python-list mailing list