]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxEXEC_MAKE_GROUP_LEADER (patch 535422)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Mar 2002 18:36:37 +0000 (18:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Mar 2002 18:36:37 +0000 (18:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/function.tex
include/wx/utils.h
src/unix/utilsunx.cpp

index 9fe55f3bf6092e378ad8337ea2eece3edd0499ee..0b3248160cbc8bdb26dc2d72688153c8ab23695f 100644 (file)
@@ -480,6 +480,12 @@ flush an unnecessary console for the processes which don't create any windows
 anyhow) but a {\tt wxEXEC\_NOHIDE} flag can be used to prevent this from
 happening, i.e. with this flag the child process window will be shown normally.
 
+Under Unix the flag {\tt wxEXEC\_MAKE\_GROUP\_LEADER} may be used to ensure
+that the new process is a group leader (this will create a new session if
+needed). Calling \helpref{wxKill}{wxkill} with the argument of -pid where pid
+is the process ID of the new process will kill this process as well as all of
+its children (except those which have started their own session).
+
 Finally, you may use the third overloaded version of this function to execute
 a process (always synchronously) and capture its output in the array
 {\it output}. The fourth version adds the possibility to additionally capture
index 2306a14cd396738bea25c9125abe6915fc1752d7..f8c883eb08ec6aa3d5936afc7474b919c664c427 100644 (file)
@@ -153,10 +153,19 @@ WXDLLEXPORT wxString wxDecToHex(int dec);
 
 enum
 {
-    wxEXEC_ASYNC    = 0,    // execute the process asynchronously
-    wxEXEC_SYNC     = 1,    //                     synchronously
-    wxEXEC_NOHIDE   = 2     // under Windows, don't hide the child even if it's
-                            // IO is redirected (this is done by default)
+    // execute the process asynchronously
+    wxEXEC_ASYNC    = 0,
+
+    // execute it synchronously, i.e. wait until it finishes
+    wxEXEC_SYNC     = 1,
+
+    // under Windows, don't hide the child even if it's IO is redirected (this
+    // is done by default)
+    wxEXEC_NOHIDE   = 2,
+
+    // under Unix, if the process is the group leader then killing -pid kills
+    // all children as well as pid
+    wxEXEC_MAKE_GROUP_LEADER = 4
 };
 
 // Execute another program.
index 83e04373a4b4b4c65d8318907cab548e88be6e00..8d1c888fc75aa70a88cf87a9f9543d8f5782c9a2 100644 (file)
@@ -650,6 +650,13 @@ long wxExecute(wxChar **argv,
                 if ( fd != STDERR_FILENO )
                     close(fd);
             }
+
+            if ( flags & wxEXEC_MAKE_GROUP_LEADER )
+            {
+                // Set process group to child process' pid.  Then killing -pid
+                // of the parent will kill the process and all of its children.
+                setsid();
+            }
         }
 
         // redirect stdio, stdout and stderr