mistserver/lib/procs.h
Peter Wu 06167128bf Add process termination registration
Edited patch because of context change due to:
commit 28548f35b0
Author: Thulinma <jaron@vietors.com>
Date:   Tue Aug 14 20:53:05 2012 +0200

    Do not report part-termination of processes.
2012-08-15 11:48:23 +02:00

37 lines
1.4 KiB
C++

/// \file procs.h
/// Contains generic function headers for managing processes.
#pragma once
#include <unistd.h>
#include <string>
#include <map>
/// Contains utility code, not directly related to streaming media
namespace Util{
typedef void (*TerminationNotifier)(pid_t pid, int exitCode);
/// Deals with spawning, monitoring and stopping child processes
class Procs{
private:
static std::map<pid_t, std::string> plist; ///< Holds active processes
static std::map<pid_t, TerminationNotifier> exitHandlers; ///< termination function, if any
static bool handler_set; ///< If true, the sigchld handler has been setup.
static void childsig_handler(int signum);
static void runCmd(std::string & cmd);
public:
static pid_t Start(std::string name, std::string cmd);
static pid_t Start(std::string name, std::string cmd, std::string cmd2);
static pid_t Start(std::string name, std::string cmd, std::string cmd2, std::string cmd3);
static void Stop(std::string name);
static void Stop(pid_t name);
static void StopAll();
static int Count();
static bool isActive(std::string name);
static bool isActive(pid_t name);
static pid_t getPid(std::string name);
static std::string getName(pid_t name);
static bool SetTerminationNotifier(pid_t pid, TerminationNotifier notifier);
};
};