#include "gnunet_configuration_lib.h"
#include "gnunet_scheduler_lib.h"
+/**
+ * Process information (OS-dependent)
+ */
+struct GNUNET_OS_Process;
+
/**
* Possible installation paths to request
#endif
+/**
+ * Get process structure for current process
+ *
+ * The pointer it returns points to static memory location and must not be
+ * deallocated/closed
+ *
+ * @return pointer to the process sturcutre for this process
+ */
+struct GNUNET_OS_Process *GNUNET_OS_process_current (void);
+
+
+/**
+ * Sends sig to the process
+ *
+ * @param proc pointer to process structure
+ * @param sig signal
+ * @return 0 on success, -1 on error
+ */
+int GNUNET_OS_process_kill (struct GNUNET_OS_Process *proc, int sig);
+
+
+/**
+ * Cleans up process structure contents (OS-dependent) and deallocates it
+ *
+ * @param proc pointer to process structure
+ */
+void GNUNET_OS_process_close (struct GNUNET_OS_Process *proc);
+
+/**
+ * Get the pid of the process in question
+ *
+ * @param proc the process to get the pid of
+ *
+ * @return the current process id
+ */
+pid_t
+GNUNET_OS_process_get_pid (struct GNUNET_OS_Process *proc);
+
/**
* Set process priority
*
- * @param proc id of the process
+ * @param proc pointer to process structure
* @param prio priority value
* @return GNUNET_OK on success, GNUNET_SYSERR on error
*/
-int GNUNET_OS_set_process_priority (pid_t proc,
+int GNUNET_OS_set_process_priority (struct GNUNET_OS_Process *proc,
enum GNUNET_SCHEDULER_Priority prio);
* @param pipe_stdout pipe to use to get output from child process (or NULL)
* @param filename name of the binary
* @param ... NULL-terminated list of arguments to the process
- * @return process ID of the new process, -1 on error
+ * @return pointer to process structure of the new process, NULL on error
*/
-pid_t
+struct GNUNET_OS_Process *
GNUNET_OS_start_process (struct GNUNET_DISK_PipeHandle *pipe_stdin,
struct GNUNET_DISK_PipeHandle *pipe_stdout,
const char *filename, ...);
* @param filename name of the binary
* @param argv NULL-terminated list of arguments to the process,
* including the process name as the first argument
- * @return process ID of the new process, -1 on error
+ * @return pointer to process structure of the new process, NULL on error
*/
-pid_t GNUNET_OS_start_process_v (const int *lsocks,
- const char *filename, char *const argv[]);
+struct GNUNET_OS_Process *
+GNUNET_OS_start_process_v (const int *lsocks, const char *filename,
+ char *const argv[]);
/**
* Retrieve the status of a process
- * @param proc process ID
+ * @param proc pointer to process structure
* @param type status type
* @param code return code/signal number
* @return GNUNET_OK on success, GNUNET_NO if the process is still running, GNUNET_SYSERR otherwise
*/
-int GNUNET_OS_process_status (pid_t proc, enum GNUNET_OS_ProcessStatusType *type,
- unsigned long *code);
+int GNUNET_OS_process_status (struct GNUNET_OS_Process *proc,
+ enum GNUNET_OS_ProcessStatusType *type, unsigned long *code);
/**
* Wait for a process
- * @param proc process ID to wait for
+ * @param proc pointer to process structure of the process to wait for
* @return GNUNET_OK on success, GNUNET_SYSERR otherwise
*/
-int GNUNET_OS_process_wait (pid_t proc);
+int GNUNET_OS_process_wait (struct GNUNET_OS_Process *proc);
+/**
+ * Connects this process to its parent via pipe
+ */
+void
+GNUNET_OS_install_parent_control_handler (void *cls,
+ const struct
+ GNUNET_SCHEDULER_TaskContext * tc);
+
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif