added wxEXEC_MAKE_GROUP_LEADER (patch 535422)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-03-27 18:36:37 +00:00
parent a4b5932472
commit e1082c9fa8
3 changed files with 26 additions and 4 deletions

View 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

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

View 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