Question: C++ and Linux System Calls // Part 1: Working With Process IDs pid_t getProcessID(void) { int process_id = getpid(); return process_id; } // Part 2:
C++ and Linux System Calls
// Part 1: Working With Process IDs pid_t getProcessID(void) { int process_id = getpid(); return process_id; }
// Part 2: Working With Multiple Processes string createNewProcess(void) { pid_t id = fork(); // DO NOT CHANGE THIS LINE OF CODE process_id = id; if(id == -1) { return "Error creating process"; } else if (id == 0) { cout<<"I am a child process!"<
return "I am bored of my parent, switching programs now"; } else { cout<<"I just became a parent!"< //wait for 2 seconds sleep(2); //wait for child to terminate wait(&status); return "My child process just terminated!"; } }
// Part 3: Working With External Commands" void replaceProcess(char * args[]) { // Spawn a process to execute the user's command. pid_t id = fork(); // TODO: Add your code here }
#endif /* TestProg_cpp */
Part 3: Working With External Commands (15 points)
Modify the replaceProcess() function in the file named Processes.cpp as follows:
The parent process will use the fork() function to create a child process. This step has been done for you.
The child process must then change its memory image to a different program by using the execvp system call (http://linux.die.net/man/3/execvp). The parameter args that has been passed to the replaceProcess() function is the array of parameters to be passed to execvp, telling it which program to execute and what parameters to pass to that program.
For example, the test code provided to you executes the ls (directory list) program with the parameter -al by setting the args array as follows:
char * args[3] = {(char * )"ls", (char * )"-al", NULL}; IMPORTANT: Although the test code executes the ls program, we must be able to change the command that execvp executes. So, DO NOT hardcode the command to be passed to execvp. Simply use the args array provided.
Finally, in the parent process, you must make sure to invoke the necessary system call to wait for the child process to terminate. Once the child terminates, exit the program.
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
