# IProcess

An interface to create new child processes, kill processes and inspect the existance of a process. Each static function has a class IInstanceLog * const log pointer, which is used for instance related
logs dependent of the log flag LOG_PROCESS.

## File information

File | common/interface/process.h
Classes | IProcess

# Classes

## IProcess

    class IProcess {
    public:
        static int Spawn(const char *filename, int argc, char ** argv, class IInstanceLog * const log);
        static int Kill(int pid, int signalNr, class IInstanceLog * const log);
        static bool ProcessExist(int pid, class IInstanceLog * const log);
        static int GetOwnPID(class IInstanceLog * const log);
        static int GetParentPID(class IInstanceLog * const log);
        static bool SetProcessGroupID(int pid, int pgid, class IInstanceLog * const log);
        static void GetOwnName(char * buffer, size_t len, class IInstanceLog * const log);
        static int System(class IInstanceLog * const log, const char * command, ...);
        static bool Exec(class IInstanceLog * const log, const char * command, char * stdOut, size_t stdOutLen);
    };

### Public static functions

int Spawn(const char *filename, int argc, char ** argv, class IInstanceLog * const log)
  Spawns a new child process based on the filename and the set of arguments determined by char **argv.

  #### Parameters

  const char * filename | The actual command which will be executed.
  int argc | The number of arguments.
  char ** argv | An array of char * arguments. Note that the first argument is the process filename itself again.
  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  On success it returns the process id of the spawned process, otherwise 0 is returned.

  #### Remarks

  STDOUT and STDERR are redirected to /dev/null with this method. If you want to have the output, you should use the ICommand interface instead.
  You may implement the IChildExitedHandler interface to get notified if your spawned process exited.

  #### Example

      char* argv[3];
      argv[0] = (char*)"/path/to/binary";
      argv[1] = (char*)"-arg1";
      argv[2] = (char*)"valueOfArg1";

      int pid = IProcess::Spawn(argv[0], 3, argv, logInstance);

int Kill(int pid, int signalNr, class IInstanceLog * const log)
  Sends the specified kill code to a process.

  #### Parameters

  int pid | The process PID.
  int signalNr | The signal number, e.g. 9 (SIG_KILL).
  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  If the kill is successful 1 is returned; otherwise 0 is returned (int).
bool ProcessExist(int pid, class IInstanceLog * const log)
  Checks if a process still exists or not.

  #### Parameters

  int pid | The process PID.
  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  true if the process still exists, otherwise false.
int GetOwnPID(class IInstanceLog * const log)
  Returns the own process ID.

  #### Parameters

  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  The process ID (int).
int GetParentPID(class IInstanceLog * const log)
  Returns the parent process ID from the own process.

  #### Parameters

  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  The parent process ID (int).
bool SetProcessGroupID(int pid, int pgid, class IInstanceLog * const log)
  Sets the process group ID of the specified process.

  #### Parameters

  int pid | The process PID.
  int pgid | The group ID.
  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

  #### Return value

  Returns true on success, otherwise false.
void GetOwnName(char * buffer, size_t len, class IInstanceLog * const log)
  Writes the own process name to the given buffer.

  #### Parameters

  char * buffer | The buffer in which the name will be written.
  size_t len | The size of the buffer.
  class IInstanceLog * const log | The IInstanceLog instance which is to be used.

int System(class IInstanceLog * const log, const char * command, ...)
  Makes use of the standard system function and runs the specified command.

  #### Parameters

  class IInstanceLog * const log | The IInstanceLog instance which is to be used.
  const char * command | The command to run (e.g. "date -s \"1970-01-02 01:01:00\"").
  ... | Parameters which are used inside command (e.g. %s etc.). The internally used buffer length is 1024 bytes!

  #### Return value

  The exit code of the system call (int).
bool Exec(class IInstanceLog * const log, const char * command, char * stdOut, size_t stdOutLen)
  Makes use of the standard system function and runs the specified command.

  #### Parameters

  class IInstanceLog * const log | The IInstanceLog instance which is to be used.
  const char * command | The command to run (e.g. "date -s \"1970-01-02 01:01:00\"").
  char * stdOut | Buffer to save std out. The buffer will be NULL terminated.
  size_t stdOutLen | Size of the buffer.

  #### Return value

  Bool.