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