+ // no redirection
+ wxPROCESS_DEFAULT = 0,
+
+ // redirect the IO of the child process
+ wxPROCESS_REDIRECT = 1
+};
+
+// ----------------------------------------------------------------------------
+// A wxProcess object should be passed to wxExecute - than its OnTerminate()
+// function will be called when the process terminates.
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_BASE wxProcess : public wxEvtHandler
+{
+public:
+ // kill the process with the given PID
+ static wxKillError Kill(int pid, wxSignal sig = wxSIGTERM, int flags = wxKILL_NOCHILDREN);
+
+ // test if the given process exists
+ static bool Exists(int pid);
+
+ // this function replaces the standard popen() one: it launches a process
+ // asynchronously and allows the caller to get the streams connected to its
+ // std{in|out|err}
+ //
+ // on error NULL is returned, in any case the process object will be
+ // deleted automatically when the process terminates and should *not* be
+ // deleted by the caller
+ static wxProcess *Open(const wxString& cmd, int flags = wxEXEC_ASYNC);
+
+
+ // ctors
+ wxProcess(wxEvtHandler *parent = NULL, int nId = wxID_ANY)
+ { Init(parent, nId, wxPROCESS_DEFAULT); }
+
+ wxProcess(int flags) { Init(NULL, wxID_ANY, flags); }
+
+ virtual ~wxProcess();
+
+ // get the process ID of the process executed by Open()
+ long GetPid() const { return m_pid; }
+
+ // may be overridden to be notified about process termination
+ virtual void OnTerminate(int pid, int status);
+
+ // call this before passing the object to wxExecute() to redirect the
+ // launched process stdin/stdout, then use GetInputStream() and
+ // GetOutputStream() to get access to them
+ void Redirect() { m_redirect = true; }
+ bool IsRedirected() const { return m_redirect; }