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