00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __WVSUBPROC_H
00021 #define __WVSUBPROC_H
00022
00023 #include "wvstringlist.h"
00024
00025 #include <stdarg.h>
00026 #include <signal.h>
00027 #include <time.h>
00028
00029 class WvSubProc
00030 {
00031 public:
00032 DeclareWvList(pid_t);
00033 pid_tList old_pids;
00034
00035 pid_t pid;
00036 bool running;
00037 int estatus;
00038 WvString pidfile, last_cmd, app;
00039 WvStringList last_args, env;
00040
00041 WvSubProc();
00042
00043 WvSubProc(const char cmd[], const char * const *argv)
00044 { startv(cmd, argv); }
00045
00046 virtual ~WvSubProc();
00047
00048 private:
00049 int _startv(const char cmd[], const char * const *argv);
00050
00051 int memlimit;
00052
00053 public:
00054 void prepare(const char cmd[], ...);
00055 void preparev(const char cmd[], va_list ap);
00056 void preparev(const char cmd[], const char * const *argv);
00057 void preparev(const char cmd[], WvStringList &);
00058
00059
00060 int start(const char cmd[], ...);
00061
00062 int startv(const char cmd[], const char * const *argv);
00063 virtual int start_again();
00064
00065 virtual int fork(int *waitfd);
00066
00067
00068
00069 virtual void stop(time_t msec_delay, bool kill_children = true);
00070
00071
00072 virtual void wait(time_t msec_delay, bool wait_children = true);
00073
00074
00075 pid_t pidfile_pid();
00076
00077
00078
00079 void setMemLimit(int megs) { memlimit = megs; }
00080
00081
00082 void kill(int sig);
00083
00084
00085 void kill_primary(int sig);
00086
00087
00088 virtual void suspend()
00089 { kill(SIGSTOP); }
00090 virtual void resume()
00091 { kill(SIGCONT); }
00092 };
00093
00094 DeclareWvList(WvSubProc);
00095
00096 #endif // __WVSUBPROC_H