1998-07-03 13:44:34 -04:00
|
|
|
\section{\class{wxProcess}}\label{wxprocess}
|
|
|
|
|
2002-07-12 19:25:14 -04:00
|
|
|
The objects of this class are used in conjunction with the
|
1999-02-17 12:56:59 -05:00
|
|
|
\helpref{wxExecute}{wxexecute} function. When a wxProcess object is passed to
|
|
|
|
wxExecute(), its \helpref{OnTerminate()}{wxprocessonterminate} virtual method
|
|
|
|
is called when the process terminates. This allows the program to be
|
|
|
|
(asynchronously) notified about the process termination and also retrieve its
|
|
|
|
exit status which is unavailable from wxExecute() in the case of
|
|
|
|
asynchronous execution.
|
|
|
|
|
|
|
|
Please note that if the process termination notification is processed by the
|
|
|
|
parent, it is responsible for deleting the wxProcess object which sent it.
|
|
|
|
However, if it is not processed, the object will delete itself and so the
|
|
|
|
library users should only delete those objects whose notifications have been
|
|
|
|
processed (and call \helpref{Detach()}{wxprocessdetach} for others).
|
1998-07-03 13:44:34 -04:00
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
wxProcess also supports IO redirection of the child process. For this, you have
|
2002-07-12 19:25:14 -04:00
|
|
|
to call its \helpref{Redirect}{wxprocessredirect} method before passing it to
|
|
|
|
\helpref{wxExecute}{wxexecute}. If the child process was launched successfully,
|
|
|
|
\helpref{GetInputStream}{wxprocessgetinputstream},
|
|
|
|
\helpref{GetOutputStream}{wxprocessgetoutputstream} and
|
2000-07-15 15:51:35 -04:00
|
|
|
\helpref{GetErrorStream}{wxprocessgeterrorstream} can then be used to retrieve
|
2002-06-07 16:15:28 -04:00
|
|
|
the streams corresponding to the child process standard output, input and
|
2000-07-15 15:51:35 -04:00
|
|
|
error output respectively.
|
|
|
|
|
2002-02-15 16:50:50 -05:00
|
|
|
\perlnote{In wxPerl this class has an additional {\tt Destroy} method,
|
|
|
|
for explicit destruction.}
|
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
\wxheading{Derived from}
|
|
|
|
|
|
|
|
\helpref{wxEvtHandler}{wxevthandler}
|
|
|
|
|
1999-02-15 15:41:29 -05:00
|
|
|
\wxheading{Include files}
|
|
|
|
|
|
|
|
<wx/process.h>
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
\wxheading{See also}
|
|
|
|
|
|
|
|
\helpref{wxExecute}{wxexecute}\\
|
|
|
|
\helpref{exec sample}{sampleexec}
|
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
|
|
|
|
|
|
|
\membersection{wxProcess::wxProcess}\label{wxprocessconstr}
|
|
|
|
|
2000-03-05 14:03:21 -05:00
|
|
|
\func{}{wxProcess}{\param{wxEvtHandler *}{ parent = NULL}, \param{int}{ id = -1}}
|
1998-07-03 13:44:34 -04:00
|
|
|
|
2002-07-12 14:15:49 -04:00
|
|
|
\func{}{wxProcess}{\param{int }{flags}}
|
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
Constructs a process object. {\it id} is only used in the case you want to
|
1998-09-06 10:43:36 -04:00
|
|
|
use wxWindows events. It identifies this object, or another window that will
|
|
|
|
receive the event.
|
1998-07-03 13:44:34 -04:00
|
|
|
|
1999-02-17 12:56:59 -05:00
|
|
|
If the {\it parent} parameter is different from NULL, it will receive
|
|
|
|
a wxEVT\_END\_PROCESS notification event (you should insert EVT\_END\_PROCESS
|
|
|
|
macro in the event table of the parent to handle it) with the given {\it id}.
|
|
|
|
|
2002-07-12 14:15:49 -04:00
|
|
|
The second constructor creates an object without any associated parent (and
|
|
|
|
hence no id neither) but allows to specify the {\it flags} which can have the
|
|
|
|
value of {\tt wxPROCESS\_DEFAULT} or {\tt wxPROCESS\_REDIRECT}. Specifying the
|
|
|
|
former value has no particular effect while using the latter one is equivalent
|
|
|
|
to calling \helpref{Redirect}{wxprocessredirect}.
|
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
\wxheading{Parameters}
|
|
|
|
|
|
|
|
\docparam{parent}{The event handler parent.}
|
|
|
|
|
|
|
|
\docparam{id}{id of an event.}
|
|
|
|
|
2002-07-12 14:15:49 -04:00
|
|
|
\docparam{flags}{either {\tt wxPROCESS\_DEFAULT} or {\tt wxPROCESS\_REDIRECT}}
|
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
\membersection{wxProcess::\destruct{wxProcess}}
|
|
|
|
|
|
|
|
\func{}{\destruct{wxProcess}}{\void}
|
|
|
|
|
|
|
|
Destroys the wxProcess object.
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
\membersection{wxProcess::CloseOutput}\label{wxprocesscloseoutput}
|
|
|
|
|
|
|
|
\func{void}{CloseOutput}{\void}
|
|
|
|
|
|
|
|
Closes the output stream (the one connected to the stdin of the child
|
|
|
|
process). This function can be used to indicate to the child process that
|
|
|
|
there is no more data to be read - usually, a filter program will only
|
|
|
|
terminate when the input stream is closed.
|
|
|
|
|
1999-02-17 12:56:59 -05:00
|
|
|
\membersection{wxProcess::Detach}\label{wxprocessdetach}
|
|
|
|
|
|
|
|
\func{void}{Detach}{\void}
|
|
|
|
|
|
|
|
Normally, a wxProcess object is deleted by its parent when it receives the
|
|
|
|
notification about the process termination. However, it might happen that the
|
|
|
|
parent object is destroyed before the external process is terminated (e.g. a
|
|
|
|
window from which this external process was launched is closed by the user)
|
2002-07-12 19:25:14 -04:00
|
|
|
and in this case it {\bf should not delete} the wxProcess object, but
|
1999-02-17 12:56:59 -05:00
|
|
|
{\bf should call Detach()} instead. After the wxProcess object is detached
|
|
|
|
from its parent, no notification events will be sent to the parent and the
|
|
|
|
object will delete itself upon reception of the process termination
|
|
|
|
notification.
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
\membersection{wxProcess::GetErrorStream}\label{wxprocessgeterrorstream}
|
|
|
|
|
|
|
|
\constfunc{wxInputStream* }{GetErrorStream}{\void}
|
|
|
|
|
|
|
|
Returns an input stream which corresponds to the standard error output (stderr)
|
|
|
|
of the child process.
|
|
|
|
|
2000-03-03 13:46:12 -05:00
|
|
|
\membersection{wxProcess::GetInputStream}\label{wxprocessgetinputstream}
|
|
|
|
|
|
|
|
\constfunc{wxInputStream* }{GetInputStream}{\void}
|
|
|
|
|
2001-03-19 09:40:51 -05:00
|
|
|
It returns an input stream corresponding to the standard output stream of the
|
2000-07-15 15:51:35 -04:00
|
|
|
subprocess. If it is NULL, you have not turned on the redirection.
|
2000-03-05 14:03:21 -05:00
|
|
|
See \helpref{wxProcess::Redirect}{wxprocessredirect}.
|
2000-03-03 13:46:12 -05:00
|
|
|
|
2000-03-10 11:06:33 -05:00
|
|
|
\membersection{wxProcess::GetOutputStream}\label{wxprocessgetoutputstream}
|
2000-03-03 13:46:12 -05:00
|
|
|
|
2000-03-10 11:06:33 -05:00
|
|
|
\constfunc{wxOutputStream* }{GetOutputStream}{\void}
|
2000-03-03 13:46:12 -05:00
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
It returns an output stream correspoding to the input stream of the subprocess.
|
2000-03-05 14:03:21 -05:00
|
|
|
If it is NULL, you have not turned on the redirection.
|
|
|
|
See \helpref{wxProcess::Redirect}{wxprocessredirect}.
|
2000-03-03 13:46:12 -05:00
|
|
|
|
2001-06-15 20:59:07 -04:00
|
|
|
\membersection{wxProcess::Kill}\label{wxprocesskill}
|
|
|
|
|
|
|
|
\func{static wxKillError}{Kill}{\param{int}{ pid}, \param{wxSignal}{ signal = wxSIGNONE}}
|
|
|
|
|
|
|
|
Send the specified signal to the given process. Possible signal values are:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
enum wxSignal
|
|
|
|
{
|
|
|
|
wxSIGNONE = 0, // verify if the process exists under Unix
|
|
|
|
wxSIGHUP,
|
|
|
|
wxSIGINT,
|
|
|
|
wxSIGQUIT,
|
|
|
|
wxSIGILL,
|
|
|
|
wxSIGTRAP,
|
|
|
|
wxSIGABRT,
|
|
|
|
wxSIGEMT,
|
|
|
|
wxSIGFPE,
|
|
|
|
wxSIGKILL, // forcefully kill, dangerous!
|
|
|
|
wxSIGBUS,
|
|
|
|
wxSIGSEGV,
|
|
|
|
wxSIGSYS,
|
|
|
|
wxSIGPIPE,
|
|
|
|
wxSIGALRM,
|
|
|
|
wxSIGTERM // terminate the process gently
|
|
|
|
};
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
{\tt wxSIGNONE}, {\tt wxSIGKILL} and {\tt wxSIGTERM} have the same meaning
|
2002-07-12 19:25:14 -04:00
|
|
|
under both Unix and Windows but all the other signals are equivalent to
|
2001-06-15 20:59:07 -04:00
|
|
|
{\tt wxSIGTERM} under Windows.
|
|
|
|
|
|
|
|
Returns the element of {\tt wxKillError} enum:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
enum wxKillError
|
|
|
|
{
|
|
|
|
wxKILL_OK, // no error
|
|
|
|
wxKILL_BAD_SIGNAL, // no such signal
|
|
|
|
wxKILL_ACCESS_DENIED, // permission denied
|
|
|
|
wxKILL_NO_PROCESS, // no such process
|
|
|
|
wxKILL_ERROR // another, unspecified error
|
|
|
|
};
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
\wxheading{See also}
|
|
|
|
|
|
|
|
\helpref{wxProcess::Exists}{wxprocessexists},\rtfsp
|
|
|
|
\helpref{wxKill}{wxkill},\rtfsp
|
2001-06-17 09:32:53 -04:00
|
|
|
\helpref{Exec sample}{sampleexec}
|
2001-06-15 20:59:07 -04:00
|
|
|
|
2002-02-15 16:50:50 -05:00
|
|
|
\membersection{wxProcess::Exists}\label{wxprocessexists}
|
2001-06-15 20:59:07 -04:00
|
|
|
|
|
|
|
\func{static bool}{Exists}{\param{int}{ pid}}
|
|
|
|
|
|
|
|
Returns {\tt TRUE} if the given process exists in the system.
|
|
|
|
|
|
|
|
\wxheading{See also}
|
|
|
|
|
|
|
|
\helpref{wxProcess::Kill}{wxprocesskill},\rtfsp
|
2001-06-17 09:32:53 -04:00
|
|
|
\helpref{Exec sample}{sampleexec}
|
2001-06-15 20:59:07 -04:00
|
|
|
|
1998-07-03 13:44:34 -04:00
|
|
|
\membersection{wxProcess::OnTerminate}\label{wxprocessonterminate}
|
|
|
|
|
1999-02-17 12:56:59 -05:00
|
|
|
\constfunc{void}{OnTerminate}{\param{int}{ pid}, \param{int}{ status}}
|
1998-07-03 13:44:34 -04:00
|
|
|
|
|
|
|
It is called when the process with the pid {\it pid} finishes.
|
2000-07-15 15:51:35 -04:00
|
|
|
It raises a wxWindows event when it isn't overridden.
|
1998-07-03 13:44:34 -04:00
|
|
|
|
1999-02-17 12:56:59 -05:00
|
|
|
\docparam{pid}{The pid of the process which has just terminated.}
|
|
|
|
|
|
|
|
\docparam{status}{The exit code of the process.}
|
1998-09-06 10:43:36 -04:00
|
|
|
|
2002-07-12 14:15:49 -04:00
|
|
|
\membersection{wxProcess::Open}\label{wxprocessopen}
|
|
|
|
|
2002-07-12 19:25:14 -04:00
|
|
|
\func{static wxProcess *}{Open}{\param{const wxString\& }{cmd} \param{int }{flags = wxEXEC\_ASYNC}}
|
2002-07-12 14:15:49 -04:00
|
|
|
|
|
|
|
This static method replaces the standard {\tt popen()} function: it launches
|
|
|
|
the process specified by the {\it cmd} parameter and returns the wxProcess
|
|
|
|
object which can be used to retrieve the streams connected to the standard
|
|
|
|
input, output and error output of the child process.
|
|
|
|
|
|
|
|
If the process couldn't be launched, {\tt NULL} is returned. Note that in any
|
|
|
|
case the returned pointer should {\bf not} be deleted, rather the process
|
|
|
|
object will be destroyed automatically when the child process terminates. This
|
|
|
|
does mean that the child process should be told to quit before the main program
|
|
|
|
exits to avoid memory leaks.
|
|
|
|
|
|
|
|
\wxheading{Parameters}
|
|
|
|
|
|
|
|
\docparam{cmd}{The command to execute, including optional arguments.}
|
2002-07-15 13:10:26 -04:00
|
|
|
\docparam{flags}{The flags to pass to \helpref{wxExecute}{wxexecute}.
|
2002-07-27 14:14:42 -04:00
|
|
|
NOTE: wxEXEC\_SYNC should not be used.}
|
2002-07-12 14:15:49 -04:00
|
|
|
|
|
|
|
\wxheading{Return value}
|
|
|
|
|
|
|
|
A pointer to new wxProcess object or {\tt NULL} on error.
|
|
|
|
|
|
|
|
\wxheading{See also}
|
|
|
|
|
|
|
|
\helpref{wxExecute}{wxexecute}
|
|
|
|
|
2000-03-05 14:03:21 -05:00
|
|
|
\membersection{wxProcess::Redirect}\label{wxprocessredirect}
|
|
|
|
|
|
|
|
\func{void}{Redirect}{\void}
|
|
|
|
|
2001-03-19 09:40:51 -05:00
|
|
|
Turns on redirection. wxExecute will try to open a couple of pipes
|
2000-03-05 14:03:21 -05:00
|
|
|
to catch the subprocess stdio. The caught input stream is returned by
|
|
|
|
GetOutputStream() as a non-seekable stream. The caught output stream is returned
|
|
|
|
by GetInputStream() as a non-seekable stream.
|
2000-03-10 11:06:33 -05:00
|
|
|
|