-// Execute another program. Returns 0 if there was an error, a PID otherwise.
-long WXDLLEXPORT wxExecute(char **argv, bool Async = FALSE,
- wxProcess *process = NULL);
-long WXDLLEXPORT wxExecute(const wxString& command, bool Async = FALSE,
- wxProcess *process = NULL);
+enum
+{
+ // 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 flags contain wxEXEC_SYNC, return -1 on failure and the exit code of the
+// process if everything was ok. Otherwise (i.e. if wxEXEC_ASYNC), return 0 on
+// failure and the PID of the launched process if ok.
+WXDLLEXPORT long wxExecute(wxChar **argv, int flags = wxEXEC_ASYNC,
+ wxProcess *process = (wxProcess *) NULL);
+WXDLLEXPORT long wxExecute(const wxString& command, int flags = wxEXEC_ASYNC,
+ wxProcess *process = (wxProcess *) NULL);
+
+// execute the command capturing its output into an array line by line, this is
+// always synchronous
+WXDLLEXPORT long wxExecute(const wxString& command,
+ wxArrayString& output);
+
+// also capture stderr (also synchronous)
+WXDLLEXPORT long wxExecute(const wxString& command,
+ wxArrayString& output,
+ wxArrayString& error);
+
+enum wxSignal
+{
+ wxSIGNONE = 0, // verify if the process exists under Unix
+ wxSIGHUP,
+ wxSIGINT,
+ wxSIGQUIT,
+ wxSIGILL,
+ wxSIGTRAP,
+ wxSIGABRT,
+ wxSIGIOT = wxSIGABRT, // another name
+ wxSIGEMT,
+ wxSIGFPE,
+ wxSIGKILL,
+ wxSIGBUS,
+ wxSIGSEGV,
+ wxSIGSYS,
+ wxSIGPIPE,
+ wxSIGALRM,
+ wxSIGTERM
+
+ // further signals are different in meaning between different Unix systems
+};