/* * dropnroll * * Copyright (C) 2009-2015 Christian Pointner * * This file is part of dropnroll. * * dropnroll is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * dropnroll 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 dropnroll. If not, see . */ #ifndef DROPNROLL_sysexec_h_INCLUDED #define DROPNROLL_sysexec_h_INCLUDED #include #include #include "options.h" typedef enum { NEW, RUNNING, KILLED } child_state_t; struct child_list_element_struct { pid_t pid_; char* script_; int err_fd_; child_state_t state_; struct timeval last_state_change_; char** argv_; char** evp_; struct child_list_element_struct* next_; }; typedef struct child_list_element_struct child_list_element_t; struct child_list_struct { child_list_element_t* first_; }; typedef struct child_list_struct child_list_t; void child_list_init(child_list_t* list); void child_list_clear(child_list_t* list); child_list_element_t* child_list_new(const char* script, char* const argv[], char* const evp[]); child_list_element_t* child_list_add(child_list_t* list, const char* script, char* const argv[], char* const evp[]); void child_list_rm(child_list_t* list, child_list_element_t* child); void child_list_rm_pid(child_list_t* list, pid_t pid); child_list_element_t* child_list_find(child_list_t* list, pid_t pid); int child_list_num_state(child_list_t* list, child_state_t state); void child_list_kill_oldest(child_list_t* list, int min_runtime); int dnr_exec(const char* script, char* const argv[], char* const evp[], child_list_t* child_lst, options_t* opt); int dnr_exec_child(child_list_element_t* child); void dnr_check_runtime(child_list_t* child_lst, options_t* opt); int dnr_waitpid(child_list_t* child_lst, options_t* opt); #endif