diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2007-11-28 15:10:27 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2007-11-28 15:10:27 (GMT) |
commit | 6046c8ed46ed92d02ef9cc27446b4e02fccd9ba6 (patch) | |
tree | cf074eb3d34c2e90de5ce72ee56fb2a8e454e1d2 /lib | |
parent | 6e1065454de9c3d252cd92a453bd69de2410ec65 (diff) |
Reap only activity processes. Fix #5044
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sugar/activity/activityfactory.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/sugar/activity/activityfactory.py b/lib/sugar/activity/activityfactory.py index 85c0832..119dcea 100644 --- a/lib/sugar/activity/activityfactory.py +++ b/lib/sugar/activity/activityfactory.py @@ -18,6 +18,7 @@ import logging import subprocess +import signal import dbus import gobject @@ -53,6 +54,16 @@ _RAINBOW_SERVICE_NAME = "org.laptop.security.Rainbow" _RAINBOW_ACTIVITY_FACTORY_PATH = "/" _RAINBOW_ACTIVITY_FACTORY_INTERFACE = "org.laptop.security.Rainbow" +_children_pid = [] + +def _sigchild_handler(signum, frame): + for child_pid in _children_pid: + pid, status = os.waitpid(child_pid, os.WNOHANG) + if pid > 0: + _children_pid.remove(pid) + +signal.signal(signal.SIGCHLD, _sigchild_handler) + def create_activity_id(): """Generate a new, unique ID for this activity""" pservice = presenceservice.get_instance() @@ -224,8 +235,9 @@ class ActivityCreationHandler(gobject.GObject): self._handle.uri) if not self._use_rainbow: - process = subprocess.Popen(command, env=environ, cwd=activity.path, - stdout=log_file, stderr=log_file) + p = subprocess.Popen(command, env=environ, cwd=activity.path, + stdout=log_file, stderr=log_file) + _children_pid.append(p.pid) else: log_file.close() system_bus = dbus.SystemBus() |