]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/ipc/Kid.h
d105e4cb238d3dca3cad80c9902ed3eb45aff417
2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef SQUID_IPC_KID_H
10 #define SQUID_IPC_KID_H
12 #include "SquidString.h"
15 /// Squid child, including current forked process info and
16 /// info persistent across restarts
21 /// keep restarting until the number of bad failures exceed this limit
22 enum { badFailureLimit
= 4 };
24 /// slower start failures are not "frequent enough" to be counted as "bad"
25 enum { fastFailureTimeLimit
= 10 }; // seconds
30 Kid(const String
& kid_name
);
32 /// called when this kid got started, records PID
33 void start(pid_t cpid
);
35 /// called when kid terminates, sets exiting status
36 void stop(PidStatus
const exitStatus
);
38 /// returns true if tracking of kid is stopped
41 /// returns true if master should restart this kid
42 bool shouldRestart() const;
44 /// returns current pid for a running kid and last pid for a stopped kid
47 /// whether the failures are "repeated and frequent"
48 bool hopeless() const;
50 /// returns true if the process terminated normally
51 bool calledExit() const;
53 /// returns the exit status of the process
54 int exitStatus() const;
56 /// whether the process exited with a given exit status code
57 bool calledExit(int code
) const;
59 /// whether the process exited with code 0
60 bool exitedHappy() const;
62 /// returns true if the kid was terminated by a signal
63 bool signaled() const;
65 /// returns the number of the signal that caused the kid to terminate
66 int termSignal() const;
68 /// whether the process was terminated by a given signal
69 bool signaled(int sgnl
) const;
72 const String
& name() const;
75 // Information preserved across restarts
76 String theName
; ///< process name
77 int badFailures
; ///< number of "repeated frequent" failures
79 // Information specific to a running or stopped kid
80 pid_t pid
; ///< current (for a running kid) or last (for stopped kid) PID
81 time_t startTime
; ///< last start time
82 bool isRunning
; ///< whether the kid is assumed to be alive
83 PidStatus status
; ///< exit status of a stopped kid
86 // TODO: processes may not be kids; is there a better place to put this?
90 pkOther
= 0, ///< we do not know or do not care
91 pkCoordinator
= 1, ///< manages all other kids
92 pkWorker
= 2, ///< general-purpose worker bee
93 pkDisker
= 4, ///< cache_dir manager
94 pkHelper
= 8 ///< general-purpose helper child
97 /// ProcessKind for the current process
98 extern int TheProcessKind
;
100 #endif /* SQUID_IPC_KID_H */