1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information
3
4 #include <rudiments/process.h>
5 #include <rudiments/permissions.h>
6 #include <rudiments/stringbuffer.h>
7 #include <rudiments/directory.h>
8 #include <rudiments/file.h>
9 #include <rudiments/stdio.h>
10 #include <rudiments/snooze.h>
11 #include "test.cpp"
12
main(int argc,const char ** argv)13 int main(int argc, const char **argv) {
14
15 header("process");
16
17 pid_t pid=process::getProcessId();
18 pid_t ppid=process::getParentProcessId();
19 pid_t pgid=process::getProcessGroupId();
20 uid_t uid=process::getUserId();
21 uid_t euid=process::getEffectiveUserId();
22 gid_t gid=process::getGroupId();
23 gid_t egid=process::getEffectiveGroupId();
24
25 /*pid_t sid=process::getSessionId();
26 stdoutput.printf("pid: %d\n",pid);
27 stdoutput.printf("ppid: %d\n",ppid);
28 stdoutput.printf("pgid: %d\n",pgid);
29 stdoutput.printf("sid: %d\n",sid);
30 stdoutput.printf("uid: %d\n",uid);
31 stdoutput.printf("euid: %d\n",euid);
32 stdoutput.printf("gid: %d\n",gid);
33 stdoutput.printf("egid: %d\n",egid);*/
34
35 test("pid",pid>1);
36 test("ppid",ppid>1);
37 #ifndef _WIN32
38 #ifdef RUDIMENTS_HAVE_GETPGID
39 test("pgid",pgid>1);
40 #else
41 test("pgid",pgid==-1);
42 #endif
43 test("uid/euid",uid==euid);
44 test("gid/egid",gid==egid);
45 #endif
46
47
48 stringbuffer cmd;
49 #ifdef _WIN32
50 cmd.append(directory::getCurrentWorkingDirectory())->
51 append("\\")->append("ls.bat");
52 const char *args[]={"ls","..\\",NULL};
53 #else
54 cmd.append("/bin/ls");
55 const char *args[]={"ls","../",NULL};
56 #endif
57
58
59 test("create pidfile",process::createPidFile("pidfile",
60 permissions::evalPermString("rw-r--r--")));
61 test("check pidfile",process::checkForPidFile("pidfile"));
62 file::remove("pidfile");
63 stdoutput.printf("\n");
64
65 test("spawn",process::spawn(cmd.getString(),args,false)>1);
66 snooze::macrosnooze(1);
67 stdoutput.printf("\n");
68
69 process::exec(cmd.getString(),args);
70 }
71