4 #ifndef RUDIMENTS_PROCESS_H
5 #define RUDIMENTS_PROCESS_H
7 #include <rudiments/private/processincludes.h>
9 enum childstatechange {
10 EXIT_CHILDSTATECHANGE=0,
11 TERMINATED_CHILDSTATECHANGE,
12 STOPPED_CHILDSTATECHANGE,
13 CONTINUED_CHILDSTATECHANGE
22 static pid_t getProcessId();
26 static pid_t getParentProcessId();
30 static pid_t getProcessGroupId();
34 static pid_t getProcessGroupId(pid_t pid);
38 static bool setProcessGroupId();
41 static bool setProcessGroupId(pid_t pgid);
44 static bool setProcessGroupId(pid_t pid, pid_t pgid);
47 static pid_t getSessionId();
50 static pid_t getSessionId(pid_t pid);
56 static pid_t newSession();
59 static uid_t getRealUserId();
62 static uid_t getEffectiveUserId();
69 static bool setUserId(uid_t uid);
76 static bool setUser(
const char *username);
82 static bool setEffectiveUserId(uid_t uid);
91 static bool setRealAndEffectiveUserId(uid_t uid,
95 static gid_t getRealGroupId();
98 static gid_t getEffectiveGroupId();
105 static bool setGroupId(gid_t gid);
112 static bool setGroup(
const char *groupname);
118 static bool setEffectiveGroupId(gid_t gid);
127 static bool setRealAndEffectiveGroupId(gid_t gid,
132 static mode_t setFileCreationMask(mode_t mask);
151 static bool exec(
const char *command,
152 const char *
const *args);
162 static pid_t spawn(
const char *command,
163 const char *
const *args);
170 static bool detach();
174 static void exit(int32_t status);
179 static void exitImmediately(int32_t status);
183 static void exitOnCrashOrShutDown();
188 static int64_t checkForPidFile(
const char *filename);
197 static bool createPidFile(
const char *filename,
204 static void exitOnShutDown();
208 static void handleShutDown(
209 void (*shutdownfunction)(int32_t));
216 static void exitOnCrash();
221 static void handleCrash(
void (*crashfunction)(int32_t));
226 static void waitForChildren();
234 static void dontWaitForChildren();
279 static pid_t getChildStateChange(pid_t pid,
283 childstatechange *newstate,
288 #include <rudiments/private/process.h>