#ifndef PROCESS_MANAGER_H #define PROCESS_MANAGER_H #include #include #ifdef _WIN32 #include typedef HANDLE process_handle_t; #else #include #include typedef pid_t process_handle_t; #endif #include "sqlite3.h" typedef struct { process_handle_t handle; char* command; // command line char* work_dir; // working directory int status; // process status (0: stopped, 1: running) int exit_code; // exit code int output_fd; // output file descriptor char* log_file; // log file path #ifdef _WIN32 HANDLE pipe_read; // pipe read handle HANDLE monitor_thread; // monitor thread handle bool monitor_active; // monitor thread active flag #endif } process_info_t; typedef struct process_manager { process_info_t* processes; size_t process_count; int update_interval; bool running; bool initialized; #ifdef _WIN32 HANDLE thread; CRITICAL_SECTION lock; #else pthread_t thread; pthread_mutex_t lock; #endif } process_manager_t; /** * @brief initialize process info structure * @param proc process info structure * @return void */ void process_info_init(process_info_t* proc); /** * @brief initialize process info structure * @return process_manager_t* if success, NULL if failed */ process_manager_t* process_manager_create(void); /** * @brief start a new process * @param manager process manager without resource limits * @param command command with arguments * @return 0 if success, -1 if failed */ int process_manager_start_process(process_manager_t* manager, const char* command); /** * @brief get the number of processes * @param manager process manager * @return the number of processes */ int get_process_count(process_manager_t* manager); /** * @brief get the current process pid * @param manager process manager * @return the current process pid */ int get_current_process_pid(process_manager_t* manager); /** * @brief update the process status in the list * @param manager process manager * @return true if success, false if failed */ bool process_manager_update(process_manager_t* manager); /** * @brief get process info by handle * @param manager process manager * @param handle process handle * @return process_info_t* if success, NULL if failed */ process_info_t* process_manager_get_process_info(process_manager_t* manager, process_handle_t handle); /** * @brief terminate a process * @param manager process manager * @param handle process handle * @return 0 if success, -1 if failed */ int process_manager_terminate_process(process_manager_t* manager, process_handle_t handle); /** * @brief destroy process manager * @param manager process manager * @return void */ void process_manager_destroy(process_manager_t* manager); /** * @brief remove a process from the list * @param manager process manager * @param handle process handle * @return 0 if success, -1 if failed */ int process_manager_remove_process(process_manager_t* manager, process_handle_t handle); /** * @brief free process manager * @param manager process manager * @return void */ void process_manager_free(process_manager_t* manager); #endif // PROCESS_MANAGER_H