85 lines
3.4 KiB
C
85 lines
3.4 KiB
C
/************************************************************************
|
|
*
|
|
* exec.h - Interface declaration for the child process subsystem
|
|
*
|
|
* $Id: exec.h 452253 2006-10-02 23:08:06Z sebor $
|
|
*
|
|
************************************************************************
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* permissions and limitations under the License.
|
|
*
|
|
**************************************************************************/
|
|
|
|
#ifndef RW_EXEC_H
|
|
#define RW_EXEC_H
|
|
|
|
#include "target.h" /* For struct target_opts */
|
|
|
|
/**
|
|
Translates a human understandable signal name into a number usable by kill ().
|
|
|
|
This method understands several formats for signal names. They are as follows:
|
|
- n
|
|
- SIGFOO
|
|
- FOO
|
|
In this list, n denotes a number and FOO denotes a short signal name.
|
|
|
|
@param signame a signal name to decode
|
|
@returns the signal number or -1 if a number couldn't be determined
|
|
@see signal_names []
|
|
*/
|
|
int get_signo (const char* signame);
|
|
|
|
/**
|
|
Translates a signal number into a human understandable name
|
|
|
|
@param signo a signal number
|
|
@returns the human understandable name for the signal (minus the SIG
|
|
prefix), or "#n" if the the name for the number is unknown to the
|
|
function, where n is signo
|
|
@see signal_names []
|
|
*/
|
|
const char* get_signame (int signo);
|
|
|
|
/**
|
|
Entry point to the child process (watchdog) subsystem.
|
|
|
|
On UNIX systems, this method fork ()s, creating a child process. This
|
|
child process becomes a process group leader, redirects input and output
|
|
files, then exec ()s the target specified in argv [0], providing it with
|
|
argv to use as its argv array. Meanwhile, the parent process calls the
|
|
wait_for_child method to monitor the child process, passing the return
|
|
value back to the calling method.
|
|
|
|
On Windows, this method creates a process using the windows CreateProcess
|
|
API call. The startup context for this process is based on the context of
|
|
the exec utility, but with the standard * file handles redirected. The
|
|
execution of the process is monitored with the WaitForSingleObject API
|
|
call. If the process doesn't complete within the allowed timeout, it is
|
|
then killed. On Windows NT systems, a soft kill of the process (via the
|
|
GenerateConsoleCtrlEvent API call) are first attempted attempted. The
|
|
process is then hard killed via the TerminateProcess API call.
|
|
|
|
@param exec_name name of the child executable
|
|
@param argv argv array for child process
|
|
@return structure describing how the child procees exited
|
|
@see wait_for_child ()
|
|
*/
|
|
void exec_file (const struct target_opts* options, struct target_status* result);
|
|
|
|
#endif /* RW_EXEC_H */
|