/// \file procs.h /// Contains generic function headers for managing processes. #pragma once #include #include #include #include #include #include "tinythread.h" /// Contains utility code, not directly related to streaming media namespace Util { /// Deals with spawning, monitoring and stopping child processes class Procs { private: static tthread::mutex plistMutex; static std::set plist; ///< Holds active process list. static bool thread_handler;///< True while thread handler should be running. static void childsig_handler(int signum); static void exit_handler(); static char* const* dequeToArgv(std::deque & argDeq); static void grim_reaper(void * n); public: static bool childRunning(pid_t p); static tthread::thread * reaper_thread; static bool handler_set; ///< If true, the sigchld handler has been setup. static void setHandler(); static std::string getOutputOf(char * const * argv); static std::string getOutputOf(std::deque & argDeq); static pid_t StartPiped(const char * const * argv, int * fdin, int * fdout, int * fderr); static pid_t StartPiped(std::deque & argDeq, int * fdin, int * fdout, int * fderr); static void Stop(pid_t name); static void Murder(pid_t name); static void StopAll(); static int Count(); static bool isActive(pid_t name); static bool isRunning(pid_t pid); static void forget(pid_t pid); static void remember(pid_t pid); static std::set socketList; ///< Holds sockets that should be closed before forking }; }