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
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.
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