1. Engineering
  2. Computer Science
  3. assignment 321 working with unix processes in c assignment instructions...

Question: assignment 321 working with unix processes in c assignment instructions...

Question details

Assignment 3-2-1: Working with UNIX Processes in C++

Assignment Instructions:

  • You must use the Cloud9 environment for this assignment.

  • Be sure to compile and test your program to be certain it works as expected. If you aren't sure how to compile and run a C++ program, refer to the Cloud9Compiling&RunningCPPPrograms Slideshow.

  • When a program is complete, follow the instructions in the Cloud9DownloadingCPPFiles Slideshow for downloading the .cpp file.

Assignment Objectives:

  • The purpose of this activity is to explore and use functions related to process creation & handling in Unix-based OSs.



Assignment Tasks:

An online version of the Linux manual can be found here: http://linux.die.net/man/. For this activity, you will mainly need to refer to the system calls section of the manual.

If you need help with navigating the file system through a command line terminal, refer to this: http://linuxcommand.org/lc3_lts0020.php .

Assignment Setup (0 points)

Note:

  • You need to use the bash shell to compile and run the program. Do not use the Cloud 9 GUI.

  1. You will need to download, compile, and execute a small program using your Cloud9 C++ environment.

  2. Type the following command into the terminal window to pull the project repository from GitLab:

    git clone https://cci-git.uncc.edu/jbahamon/ITSC_3146_A_3_2.git

  1. Change directory into the newly created directory (folder) named ITSC_3146_A_3_2.

  2. Issue the following command to compile the code:
    g++ Assignment_3_2.cpp Processes.cpp -o Assignment_3_2

  3. Issue the following command to execute the program:
    ./Assignment_3_2

Part 1: Working With Process IDs (5 points)

  1. Modify the getProcessID() function in the file named Processes.cpp

    1. The function must find and store the process's own process id

    2. The function must return the process id to the calling program. Note that the function currently returns a default value of -1.
      Hint: search for “process id” in the “System Calls” section of the Linux manual.

Part 2: Working With Multiple Processes (10 points)

  1. Modify the createNewProcess() function in the file named Processes.cpp as follows:

    1. The child process must print the message I am a child process!

    2. The child process must then return a string with the message I am bored of my parent, switching programs now

    3. The parent process must print the message I just became a parent!

    4. The parent process must then wait until the child process terminates, at which point it must return a string with the message My child process just terminated! and then terminate itself. Hint: search for “wait for process” in the “System Calls” section of the Linux manual.

      IMPORTANT:
      Do NOT type the messages, copy-paste them from here. Your output must be exact.

Part 3: Working With External Commands (15 points)

  1. Modify the replaceProcess() function in the file named Processes.cpp as follows:

    1. The parent process will use the fork() function to create a child process. This step has been done for you.

    2. 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.

  1. 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.


Expected Output:

If you execute the code you pull from GitLab without any modifications, it will produce the following output:

Part 1: Working With Process IDs Process ID-1 Part 2: Working With Multiple Processes Part 3: Working With External Commands

    If you make all required changes correctly, your program should produce output similar to the following:

Part 1: Working With Process IDs Process ID: 3329 Part 2: Working With Multiple Processes I just became a parent! I am a chitd process! I am bored of my parent, switching programs now My child process just terminated! Part 3: Working With External Commands total 52 rwxr-xr-x 1 ubuntu ubuntu 14570 Jan 20 20:21 Assignment_3_2 -rw-r--r- 1 ubuntu ubuntu 1124 Jan 20 20:1 8 Assignment 3_2.cpp -rwrr 1 ubuntu ubuntu 4984 Jan 20 20:21 Assignment 32.0 -rw-r--r-- 1 ubuntu ubuntu 378 Jan 20 20:18 Makefile -rw-r-r1 ubuntu ubuntu 1466 Jan 20 20:20 Processes.cpp -rw-r--r--1 ubuntu ubuntu 495 Jan 20 20:18 Processes.h -rw-r-r-- 1 ubuntu ubuntu 5088 Jan 20 20:21 Processes.° -rw-r-r1 ubuntu ubuntu 905 Jan 20 20:18 Processes_SK.cpp

below is my code which isnt giving the correct output when i run it

//
// Processes.cpp
// ITSC 3146
//
// Created by Bahamon, Julio on 1/12/17.
//


/*
@file Processes.cpp
@author student name,
@author student name,
@author student name,
@description: <ADD DESCRIPTION>
@course: ITSC 3146
@assignment: in-class activity [n]
*/

#ifndef Processes_cpp

#define Processes_cpp

//Import required header file

#include "Processes.h"

using namespace std;

//Part 1: Working With Process IDs

pid_t getProcessID(void)

{

      // TODO: Add your code here

      //Get the pid of the process

      pid_t id = getpid();

      //return the id

      return id;

}

//Part 2: Working With Multiple Processes

//Implement method to create child process

string createNewProcess(void)

{

      //Create a child process

      pid_t id = fork();

      // DO NOT CHANGE THIS LINE OF CODE

      process_id = id;

      //If the id is -1

      if (id == -1)

      {

            return "Error creating process";

      }

      //If the ID is 0

      else if (id == 0)

      {

            cout << "I am a child process! ";

            return "I am bored of my parent, switching programs now";

      }

      //Otherwise

      else

      {

            cout << "I just became a parent! ";

            int status = 0;

            wait(&status);

            return "My child process just terminated!";

      }

}

//Part 3: Working With External Commands"

//Implement the method to replace the process

void replaceProcess(char * args[])

{

      //Create child process

      pid_t id = fork();

      //Execute with the new process

      execvp(args[0], args);

}

#endif /* TestProg_cpp */

Solution by an expert tutor
Blurred Solution
This question has been solved
Subscribe to see this solution