/* upstart * * Copyright © 2009 Canonical Ltd. * Author: Scott James Remnant . * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef INIT_JOB_PROCESS_H #define INIT_JOB_PROCESS_H #include #include #include #include #include "process.h" #include "job_class.h" #include "job.h" /** * JobProcessErrorType: * * These constants represent the different steps of process spawning that * can produce an error. **/ typedef enum job_process_error_type { JOB_PROCESS_ERROR_CONSOLE, JOB_PROCESS_ERROR_RLIMIT, JOB_PROCESS_ERROR_PRIORITY, JOB_PROCESS_ERROR_OOM_ADJ, JOB_PROCESS_ERROR_CHROOT, JOB_PROCESS_ERROR_CHDIR, JOB_PROCESS_ERROR_PTRACE, JOB_PROCESS_ERROR_EXEC } JobProcessErrorType; /** * JobProcessError: * @error: ordinary NihError, * @type: specific error, * @arg: relevant argument to @type, * @errnum: system error number. * * This structure builds on NihError to include additional fields useful * for an error generated by spawning a process. @error includes the single * error number and human-readable message which are sufficient for many * purposes. * * @type indicates which step of the spawning process failed, @arg is any * information relevant to @type (such as the resource limit that could not * be set) and @errnum is the actual system error number. * * If you receive a JOB_PROCESS_ERROR, the returned NihError structure is * actually this structure and can be cast to get the additional fields. **/ typedef struct job_process_error { NihError error; JobProcessErrorType type; int arg; int errnum; } JobProcessError; NIH_BEGIN_EXTERN int job_process_run (Job *job, ProcessType process); pid_t job_process_spawn (JobClass *class, char * const argv[], char * const *env, int trace) __attribute__ ((warn_unused_result)); void job_process_kill (Job *job, ProcessType process); void job_process_handler (void *ptr, pid_t pid, NihChildEvents event, int status); Job *job_process_find (pid_t pid, ProcessType *process); NIH_END_EXTERN #endif /* INIT_JOB_PROCESS_H */