NAME

ACE_Process_Manager - Manages a pool of processs.

SYNOPSIS


#include <ace/Process_Manager.h >


class ACE_Process_Manager
{
  public:
    friend class ACE_Process_Control;
    enum{ DEFAULT_SIZE = 100 };
    ACE_Process_Manager (
        size_t size = ACE_Process_Manager::DEFAULT_SIZE
        );
    ~ACE_Process_Manager (void);
    int open (size_t size = DEFAULT_SIZE);
    int close (void);
    int spawn (
        ACE_THR_FUNC func,
        void *args,
        long flags,
        pid_t * = 0,
        u_int priority = 0,
        void *stack = 0,
        size_t stack_size = 0
        );
    int spawn_n (
        int n,
        ACE_THR_FUNC func,
        void *args,
        long flags,
        u_int priority = 0
        );
    void *exit (void *status);
    int wait (ACE_Time_Value *timeout = 0);
    int suspend_all (void);
    int suspend (pid_t);
    int suspend_grp (int grp_id);
    int resume_all (void);
    int resume (pid_t);
    int resume_grp (int grp_id);
    int kill_all (int signum);
    int kill (pid_t, int signum);
    int kill_grp (int grp_id, int signum);
    int set_grp (pid_t, int grp_id);
    int get_grp (pid_t, int &grp_id);
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  private:
    int resize (size_t);
    int spawn_i (
        ACE_THR_FUNC func,
        void *args,
        long flags,
        pid_t * = 0,
        u_int priority = 0,
        void *stack = 0,
        size_t stack_size = 0
        );
    int find (pid_t p_id);
    int insert_proc (pid_t p_id);
    int append_proc (
        pid_t p_id,
        ACE_Process_Descriptor::Process_State
        );
    void remove_proc (int i);
    typedef int (ACE_Process_Manager::*PROC_FUNC)(int, int);
    int apply_grp (int grp_id, PROC_FUNC, int = 0);
    int apply_all (PROC_FUNC, int = 0);
    int resume_proc (int i);
    int suspend_proc (int i);
    int kill_proc (int i, int signum);
    ACE_Process_Descriptor *proc_table_;
    size_t max_table_size_;
    size_t current_count_;
    int grp_id_;
};

DESCRIPTION

This class allows operations on groups of processs atomically.

Initialization and termination methods.

ACE_Process_Manager (size_t size = ACE_Process_Manager::DEFAULT_SIZE);
~ACE_Process_Manager (void);
int open (size_t size = DEFAULT_SIZE);
int close (void);
int spawn (
    ACE_THR_FUNC func,
    void *args,
    long flags,
    pid_t * = 0,
    u_int priority = 0,
    void *stack = 0,
    size_t stack_size = 0
    );
Returns: on success a unique group id that can be used to control other processs added to the same group. On failure, returns -1.
int spawn_n (
    int n,
    ACE_THR_FUNC func,
    void *args,
    long flags,
    u_int priority = 0
    );
Returns: on success a unique group id that can be used to control all of the processs in the same group. On failure, returns -1.
void *exit (void *status);
int wait (ACE_Time_Value *timeout = 0);

Suspend methods.

int suspend_all (void);
int suspend (pid_t);
int suspend_grp (int grp_id);

Resume methods.

int resume_all (void);
int resume (pid_t);
int resume_grp (int grp_id);

Kill methods (send signals...).

int kill_all (int signum);
int kill (pid_t, int signum);
int kill_grp (int grp_id, int signum);

Set/get group ids for a particular process id.

int set_grp (pid_t, int grp_id);
int get_grp (pid_t, int &grp_id);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;

The following four methods implement a simple scheme for

operating on a collection of processs atomically.
typedef int (ACE_Process_Manager::*PROC_FUNC)(int, int);
int apply_grp (int grp_id, PROC_FUNC, int = 0);
int apply_all (PROC_FUNC, int = 0);
int resume_proc (int i);
int suspend_proc (int i);
int kill_proc (int i, int signum);
ACE_Process_Descriptor *proc_table_;
size_t max_table_size_;
size_t current_count_;
int grp_id_;

AUTHOR

Doug Schmidt

LIBRARY

ace