SlideShare a Scribd company logo
1 of 13
Program Assignment : Process Management
Objective: This program assignment is given to the Operating
Systems course to allow the students to figure out how a single
process (parent process) creates a child process and how they
work on Unix/Linux(/Mac OS X/Windows) environment.
Additionally, student should combine the code for describing
inter-process communication into this assignment. Both parent
and child processes interact with each other through shared
memory-based communication scheme or message passing
scheme.
Environment: Unix/Linux environment (VM Linux or Triton
Server, or Mac OS X), Windows platform
Language: C or C++, Java
Requirements:
i. You have wide range of choices for this assignment. First,
design your program to explain the basic concept of the process
management in Unix Kernel. This main idea will be evolved to
show your understanding on inter-process communication, file
processing, etc.
ii. Refer to the following system calls:
- fork(), getpid(), family of exec(), wait(), sleep() system calls
for process management
- shmget(), shmat(), shmdt(), shmctl() for shared memory
support or
- msgget(), msgsnd(), msgrcv(), msgctl(), etc. for message
passing support
iii. The program should present that two different processes,
both parent and child, execute as they are supposed to.
iv. The output should contain the screen capture of the
execution procedure of the program.
v. Interaction between parent and child processes can be
provided through inter-process communication schemes, such as
shared-memory or message passing schemes.
vi. Result should be organized as a document which explains the
overview of your program, code, execution results, and the
conclusion including justification of your program, lessons
you've learned, comments, etc.
Note:
i. In addition, please try to understand how the local and global
variables work across the processes
ii. read() or write () functions are used to understand how they
work on the different processes.
iii. For extra credit, you can also incorporate advanced features,
like socket or thread functions, into your code.
Examples:
1. Process Creation and IPC with Shared Memory Scheme
===============================================
==============
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t pid;
int segment_id; //allocate the memory
char *shared_memory; //pointer to memory
const int size = 4096;
segment_id = shmget(IPC_PRIVATE, size, S_IRUSR |
S_IWUSR);
shared_memory = (char *) shmat(segment_id, NULL, 0);
pid = fork();
if(pid < 0) { //error
fprintf(stderr, "Fork failed");
return 1;
}
else if(pid == 0){ //child process
char *child_shared_memory;
child_shared_memory = (char *)
shmat(segment_id,NULL,0); //attach mem
sprintf(child_shared_memory, "Hello parent
process!"); //write to the shared mem
shmdt(child_shared_memory);
}
else {//parent process
wait(NULL);
printf("Child process completed.n");
printf("The child process has written to the shared memory.nIt
has said: %sn", shared_memory); //read from shared mem
shmdt(shared_memory);
shmctl(segment_id, IPC_RMID, NULL);
}
return 0;
}
===============================================
==============
2. Process Creation and IPC with Message Passing Scheme
===============================================
==============
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#define N 20
typedef struct{
long stype;
char input[N];
}msgq;
int origin = 12345;
int main(int argv, char * argc[]){
msgq sendq;
msgq rcvq;
size_t qlen;
key_t key=1111;
pid_t pid_p, pid_c;
int msgid = msgget((key_t)1111, 0666|
IPC_CREAT); //declare the msg queue id
int shrm_id, shrm_size = 1024; //size of
memory for sharing
char * shrm_addr;
shrm_id = shmget(IPC_PRIVATE, shrm_size, S_IRUSR |
S_IWUSR); // get the id of memory for sharing
shrm_addr = (char*)shmat(shrm_id, NULL, 0);
pid_p = getpid(); // store parent_process_id into
variable ; pid_p
pid_c = fork(); // store child_process_id into
variable ; pid_c
//meaning of return value of fork()
//value < 0 : fork is failed
//value == 0 : child process
//value > 0 : parent process
if(pid_c < 0){
fprintf(stderr, "failed to fork()n"); // print error msg
by using stderr of fprintf
return 0;
}else if(pid_c ==0){
printf("start of child processn");
printf("--------------------------------nn");
printf("origin : %dn", origin);
origin++;
printf("value of origin after origin++; : %dnn",
origin);
char * c_shrm_addr = (char *)shmat(shrm_id, NULL,
0); // give shared memory to child by using shmat()
// NULL means find somewhere which has been
mapped
if(c_shrm_addr ==(void *) -1) // shmat() return (void
*)-1 when the sharing is failed
fprintf(stderr, "failed to sharen");
pid_c = getpid();
sendq.stype=1;
printf("input string that will be sent to parent process :
");
scanf("%s",sendq.input); //store the string for send to
parent into msg queue
qlen= strlen(sendq.input)+1;
if(msgsnd(msgid,&sendq, qlen ,IPC_NOWAIT)<0){
perror("msgsnd");
exit(0);
}
else{
printf("Msgsend : %sn", sendq.input);
}
printf("n--------------------------------n");
printf("end of child process n");
} else {
//now in parent process
printf("nstart of parent processn");
printf("--------------------------------nn");
char str[N];
int i = 0;
wait(NULL); //wait until the child process
finished
printf("n--------------------------------n");
printf("back to the parent process n");
printf("--------------------------------nn");
printf("origin : %dn", origin);
if(origin == 12345)
printf("changed origin value in child is not
applied to parentnn");
if(origin == 12346)
printf("changed origin value in child is applied ro
parentnn");
if((msgid = msgget(key,0666))<0){ //in case of
error in msgget
perror("msgget");
exit(1);
}
if(msgrcv(msgid,&rcvq,N+1,1,0)==0){ //in case of
error in msgrcv
perror("msgrcv");
exit(1);
}
printf("recieve : %snn",rcvq.input);
printf("child process refers to the memory of parent :
%xn", (int)shrm_addr);
pid_p = getpid(IPC_PRIVATE, IPC_CREAT);
printf("ID of Parent : %dn", pid_p);
printf("ID of Child : %dn", pid_c);
printf("n--------------------------------n");
printf("end of parent processnn");
}
shmdt(shrm_addr);
shmctl(shrm_id, IPC_RMID, NULL);
return 0;
}
===============================================
============== 3. Compiling and executing C codes
$ cc msgpass.c -o msgpass
$ ./msgpass
http://linux.die.net/man/3/exec
fork() creates a new process by duplicating the calling process.
The new process, referred to as the child, is an exact duplicate
of the calling process, referred to as the parent#include
<unistd.h>pid_t fork(void);
The exec() family of functions replaces the current process
image with a new process image. The functions described in this
manual page are front-ends for execve(2). (See the manual page
for execve(2) for further details about the replacement of the
current process image.)
The exec() family of functions include execl, execlp, execle,
execv, execvp, and execvpe to execute a file.
The ANSI prototype for execl() is:
int execl(const char *path, const char *arg0,..., const char
*argn, 0)
http://www.cems.uwe.ac.uk/~irjohnso/coursenotes/lrc/system/pc
/pc4.htm #inciude <stdio.h> #inciude <unistd.h> main()
{ execl("/bin/ls", "ls", "-l", 0); printf("Can
only get here on errorn"); }
The first parameter to execl() in this example is the full
pathname to the ls command. This is the file whose contents
will be run, provided the process has execute permission on the
file. The rest of the execl() parameters provide the strings to
which the argv array elements in the new program will point. In
this example, it means that the ls program will see the
string ls pointed to by its argv[0], and the string -l pointed to by
itsargv[1]. In addition to making all these parameters available
to the new program, the exec() calls also pass a value for the
variable: extern char **environ;
This variable has the same format as the argv variable except
that the items passed via environ are the values in the
environment of the process (like any exported shell variables),
rather than the command line parameters. In the case of execl(),
the value of the environ variable in the new program will be a
copy of the value of this variable in the calling process.
The execl() version of exec() is fine in the circumstances where
you can ex-plicitly list all of the parameters, as in the previous
example. Now suppose you want to write a program that doesn't
just run ls, but will run any program you wish, and pass it any
number of appropriate command line parameters.
Obviously, execl() won't do the job.
The example program below, which implements this
requirement, shows, however, that the system call execv() will
perform as required: #inciude <stdio.h> main(int argc, char
**argv) { if (argc==1) {
printf("Usage: run <command> [<paraneters>]n");
exit(1) } execv(argv[l], &argv[1));
printf("Sorry... couldn't run that!n"); }
The prototype for execv() shows that it only takes two
parameters, the first is the full pathname to the command to
execute and the second is the argv value you want to pass into
the new program. In the previous example this value was
derived from the argv value passed into the run command, so
that the run command can take the command line parameter
values you pass it and just pass them on. int execl(pathname,
argo, ..., argn, 0); int execv(pathname, argv); int
execlp(cmdname, arg0, ..., argn, 0); int execvp(cmdname,
argv); int execle(patbname, arg0, ..., arga, 0, envp); int
execve(pathname, argv, envp); char *pathname, *cmdname;
char *arg0, ..., *argn; char **argv, **envp;
pipe() creates a pipe, a unidirectional data channel that can be
used for interprocess communication. The array pipefd is used
to return two file descriptors referring to the ends of the
pipe. pipefd[0] refers to the read end of the
pipe. pipefd[1] refers to the write end of the pipe. Data written
to the write end of the pipe is buffered by the kernel until it is
read from the read end of the pipe#include <unistd.h>int
pipe(int pipefd[2]);#define _GNU_SOURCE /* See
feature_test_macros(7) */#include<fcntl.h> /* Obtain
O_* constant definitions */#include <unistd.h>int pipe2(int
pipefd[2], int flags);
read() attempts to read up to count bytes from file
descriptor fd into the buffer starting at buf.#include
<unistd.h>ssize_t read(int fd, void *buf, size_t count);
write() writes up to count bytes from the buffer pointed buf to
the file referred to by the file descriptor fd.#include
<unistd.h>ssize_t write(int fd, const void *buf, size_t count);
close() closes a file descriptor, so that it no longer refers to any
file and may be reused. Any record locks (see fcntl(2)) held on
the file it was associated with, and owned by the process, are
removed (regardless of the file descriptor that was used to
obtain the lock).
If fd is the last file descriptor referring to the underlying open
file description (seeopen(2)), the resources associated with the
open file description are freed; if the descriptor was the last
reference to a file which has been removed using unlink(2) the
file is deleted.#include <unistd.h>int close(int fd);
Sample Program 1
/****************************************************
************ * * Example: to demonstrate fork() and execl()
and system calls *
*****************************************************
**********/#include <stdio.h>#include <stdlib.h>#include
<sys/types.h>#include <unistd.h>#include <sys/wait.h>int
main( int argc, char *argv[], char *env[] ){ pid_t my_pid,
parent_pid, child_pid; int status;/* get and print my pid and
my parent's pid. */ my_pid = getpid(); parent_pid =
getppid(); printf("n Parent: my pid is %dnn", my_pid);
printf("Parent: my parent's pid is %dnn", parent_pid);/* print
error message if fork() fails */ if((child_pid = fork()) < 0 ) {
perror("fork failure"); exit(1); }/* fork() == 0 for child
process */ if(child_pid == 0) { printf("nChild: I am a new-
born process!nn"); my_pid = getpid(); parent_pid =
getppid(); printf("Child: my pid is: %dnn", my_pid);
printf("Child: my parent's pid is: %dnn", parent_pid);
printf("Child: I will sleep 3 seconds and then execute - date -
command nn"); sleep(3); printf("Child: Now, I woke up
and am executing date command nn"); execl("/bin/date",
"date", 0, 0); perror("execl() failure!nn"); printf("This
print is after execl() and should not have been executed if execl
were successful! nn"); _exit(1); }/* * parent process */
else { printf("nParent: I created a child process.nn");
printf("Parent: my child's pid is: %dnn", child_pid);
system("ps -acefl | grep ercal"); printf("n n");
wait(&status); /* can use wait(NULL) since exit status
from child is not used. */ printf("n Parent: my child is dead.
I am going to leave.n n "); } return 0;}
Sample Program 2
Execution > gcc –o proc proc.c> gcc –o fibo fibo.c> gcc –o pipe
pipe.c> ./proc
proc.c#include <stdio.h>#include <sys/shm.h>#include
<sys/stat.h>#include <sys/types.h>#include <unistd.h>int
main(){ pid_t pid; int segment_id; //allocate the memory
char *shared_memory; //pointer to memory const int size =
4096; segment_id = shmget(IPC_PRIVATE, size, S_IRUSR |
S_IWUSR); shared_memory = (char *) shmat(segment_id,
NULL, 0); pid = fork(); if(pid < 0) { //error
fprintf(stderr, "Fork failed"); return 1; } else if(pid
== 0){ //child process char *child_shared_memory;
child_shared_memory = (char *) shmat(segment_id,NULL,0);
//attach mem sprintf(child_shared_memory, "Hello
parent process!"); //write to
the shared mem shmdt(child_shared_memory);
execl("./pipe", "pipe", "3", 0); /* to call pipe program */
execl("./fibo", "fibo", "12", 0); /* to call fibo program */ }
else {//parent process wait(NULL);
printf("Child process completed.n"); printf("The
child process has written to the shared memory.n It
has said: %sn", shared_memory); //read from shared mem
shmdt(shared_memory); shmctl(segment_id,
IPC_RMID, NULL); } return 0;}
fibo.c#include <stdio.h>#include <stdlib.h>#include
<sys/types.h>#include <unistd.h>#include <string.h>int fibo(int
num);int main(int argc, char *argv[]) { if (argc != 2) {
fprintf(stderr, "argc %d n", argc); fprintf(stderr, "argv[0]:
%s >n", argv[0]); fprintf(stderr, "argv[1]: %s >n",
argv[1]); fprintf(stderr, "Usage: %s <string>n", argv[0]);
exit(EXIT_FAILURE); } int num = atoi(argv[1]); printf(
"%d'th Fibonacci number is %dn", num, fibo(num));
exit(EXIT_SUCCESS);} /* end of main */ int fibo(int num) {
if (num > 0) { if (num <=2) { return 1; } else {
return fibo(num-1) + fibo(num-2); } } else { return -1;
}} /* end of fibo() */
pipe.c#include <stdio.h>#include <stdlib.h>#include
<sys/shm.h>#include <sys/stat.h>#include <sys/wait.h>#include
<sys/types.h>#include <unistd.h>#include <string.h>int
segmentId;char *sharedMemory;int main(int argc, char *argv[])
{ int pipefd[2]; pid_t cpid; char buf; if (argc != 2) {
fprintf(stderr, "argc %d n", argc); fprintf(stderr, "argv[0]:
%s >n", argv[0]); fprintf(stderr, "argv[1]: %s >n",
argv[1]); fprintf(stderr, "Usage: %s <string>n", argv[0]);
exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) {
perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if
(cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }
if (cpid == 0) { /* Child reads from pipe */ close(pipefd[1]);
/* Close unused write end */ while (read(pipefd[0], &buf, 1)
> 0) write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "n", 1); _exit(EXIT_SUCCESS);
} else { /* Parent writes argv[1] to pipe */
close(pipefd[0]); /* Close unsed read end */ write(pipefd[1],
argv[1], strlen(argv[1])); close(pipefd[1]); /* Reader will
see EOF */ wait (NULL); /* Wait for child */
exit(EXIT_SUCCESS); }}
Program Assignment  Process ManagementObjective This program a.docx

More Related Content

Similar to Program Assignment Process ManagementObjective This program a.docx

IO redirection in C shellPlease implement input output redirect.pdf
IO redirection in C shellPlease implement input  output redirect.pdfIO redirection in C shellPlease implement input  output redirect.pdf
IO redirection in C shellPlease implement input output redirect.pdfforecastfashions
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Vincenzo Iozzo
 
Shell to be modified#include stdlib.h #include unistd.h .pdf
Shell to be modified#include stdlib.h #include unistd.h .pdfShell to be modified#include stdlib.h #include unistd.h .pdf
Shell to be modified#include stdlib.h #include unistd.h .pdfclarityvision
 
What is-a-computer-process-os
What is-a-computer-process-osWhat is-a-computer-process-os
What is-a-computer-process-osManish Singh
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...David Walker
 
Buffer overflow tutorial
Buffer overflow tutorialBuffer overflow tutorial
Buffer overflow tutorialhughpearse
 
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docx
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docxLab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docx
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docxDIPESH30
 
C aptitude questions
C aptitude questionsC aptitude questions
C aptitude questionsSrikanth
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3Srikanth
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administrationvceder
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesPuppet
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakNETWAYS
 
golang_getting_started.pptx
golang_getting_started.pptxgolang_getting_started.pptx
golang_getting_started.pptxGuy Komari
 

Similar to Program Assignment Process ManagementObjective This program a.docx (20)

IO redirection in C shellPlease implement input output redirect.pdf
IO redirection in C shellPlease implement input  output redirect.pdfIO redirection in C shellPlease implement input  output redirect.pdf
IO redirection in C shellPlease implement input output redirect.pdf
 
Activity 5
Activity 5Activity 5
Activity 5
 
srgoc
srgocsrgoc
srgoc
 
C Exam Help
C Exam Help C Exam Help
C Exam Help
 
C Tutorials
C TutorialsC Tutorials
C Tutorials
 
C Homework Help
C Homework HelpC Homework Help
C Homework Help
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
 
Shell to be modified#include stdlib.h #include unistd.h .pdf
Shell to be modified#include stdlib.h #include unistd.h .pdfShell to be modified#include stdlib.h #include unistd.h .pdf
Shell to be modified#include stdlib.h #include unistd.h .pdf
 
What is-a-computer-process-os
What is-a-computer-process-osWhat is-a-computer-process-os
What is-a-computer-process-os
 
Book
BookBook
Book
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
 
Buffer overflow tutorial
Buffer overflow tutorialBuffer overflow tutorial
Buffer overflow tutorial
 
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docx
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docxLab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docx
Lab01Filesbuild.bat@echo offclsset DRIVE_LETTER=1.docx
 
C aptitude questions
C aptitude questionsC aptitude questions
C aptitude questions
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administration
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large Enterprises
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
 
MPI
MPIMPI
MPI
 
golang_getting_started.pptx
golang_getting_started.pptxgolang_getting_started.pptx
golang_getting_started.pptx
 

More from wkyra78

Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docx
Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docxMelissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docx
Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docxwkyra78
 
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docx
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docxMelissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docx
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docxwkyra78
 
Meiner, S. E., & Yeager, J. J. (2019). Chapter 17Chap.docx
Meiner, S. E., & Yeager, J. J. (2019).    Chapter 17Chap.docxMeiner, S. E., & Yeager, J. J. (2019).    Chapter 17Chap.docx
Meiner, S. E., & Yeager, J. J. (2019). Chapter 17Chap.docxwkyra78
 
member is a security software architect in a cloud service provider .docx
member is a security software architect in a cloud service provider .docxmember is a security software architect in a cloud service provider .docx
member is a security software architect in a cloud service provider .docxwkyra78
 
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docx
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docxMelissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docx
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docxwkyra78
 
Melissa is a 15-year-old high school student. Over the last week.docx
Melissa is a 15-year-old high school student. Over the last week.docxMelissa is a 15-year-old high school student. Over the last week.docx
Melissa is a 15-year-old high school student. Over the last week.docxwkyra78
 
Measurement  of  the  angle  θ          .docx
Measurement  of  the  angle  θ          .docxMeasurement  of  the  angle  θ          .docx
Measurement  of  the  angle  θ          .docxwkyra78
 
Measurement of the angle θ For better understanding .docx
Measurement of the angle θ     For better understanding .docxMeasurement of the angle θ     For better understanding .docx
Measurement of the angle θ For better understanding .docxwkyra78
 
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docx
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docxMeaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docx
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docxwkyra78
 
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docx
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docxMBA6231 - 1.1 - project charter.docxProject Charter Pr.docx
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docxwkyra78
 
Medication Errors Led to Disastrous Outcomes1. Search th.docx
Medication Errors Led to Disastrous Outcomes1. Search th.docxMedication Errors Led to Disastrous Outcomes1. Search th.docx
Medication Errors Led to Disastrous Outcomes1. Search th.docxwkyra78
 
Meet, call, Skype or Zoom with a retired athlete and interview himh.docx
Meet, call, Skype or Zoom with a retired athlete and interview himh.docxMeet, call, Skype or Zoom with a retired athlete and interview himh.docx
Meet, call, Skype or Zoom with a retired athlete and interview himh.docxwkyra78
 
Medication Administration Make a list of the most common med.docx
Medication Administration Make a list of the most common med.docxMedication Administration Make a list of the most common med.docx
Medication Administration Make a list of the most common med.docxwkyra78
 
media portfolio”about chapter 1 to 15 from the book  Ci.docx
media portfolio”about chapter 1 to 15 from the book  Ci.docxmedia portfolio”about chapter 1 to 15 from the book  Ci.docx
media portfolio”about chapter 1 to 15 from the book  Ci.docxwkyra78
 
MediationNameAMUDate.docx
MediationNameAMUDate.docxMediationNameAMUDate.docx
MediationNameAMUDate.docxwkyra78
 
Media coverage influences the publics perception of the crimina.docx
Media coverage influences the publics perception of the crimina.docxMedia coverage influences the publics perception of the crimina.docx
Media coverage influences the publics perception of the crimina.docxwkyra78
 
Media Content AnalysisPurpose Evaluate the quality and value of.docx
Media Content AnalysisPurpose Evaluate the quality and value of.docxMedia Content AnalysisPurpose Evaluate the quality and value of.docx
Media Content AnalysisPurpose Evaluate the quality and value of.docxwkyra78
 
Mayan gods and goddesses are very much a part of this text.  Their i.docx
Mayan gods and goddesses are very much a part of this text.  Their i.docxMayan gods and goddesses are very much a part of this text.  Their i.docx
Mayan gods and goddesses are very much a part of this text.  Their i.docxwkyra78
 
Media and SocietyIn 1,100 words, complete the followingAn.docx
Media and SocietyIn 1,100 words, complete the followingAn.docxMedia and SocietyIn 1,100 words, complete the followingAn.docx
Media and SocietyIn 1,100 words, complete the followingAn.docxwkyra78
 
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docx
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docxMBA 5110 – Business Organization and ManagementMidterm ExamAns.docx
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docxwkyra78
 

More from wkyra78 (20)

Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docx
Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docxMelissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docx
Melissa HinkhouseWeek 3-Original PostNURS 6050 Policy and A.docx
 
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docx
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docxMelissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docx
Melissa HinkhouseAdvanced Pharmacology NURS-6521N-43Professo.docx
 
Meiner, S. E., & Yeager, J. J. (2019). Chapter 17Chap.docx
Meiner, S. E., & Yeager, J. J. (2019).    Chapter 17Chap.docxMeiner, S. E., & Yeager, J. J. (2019).    Chapter 17Chap.docx
Meiner, S. E., & Yeager, J. J. (2019). Chapter 17Chap.docx
 
member is a security software architect in a cloud service provider .docx
member is a security software architect in a cloud service provider .docxmember is a security software architect in a cloud service provider .docx
member is a security software architect in a cloud service provider .docx
 
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docx
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docxMelissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docx
Melissa ShortridgeWeek 6COLLAPSEMy own attitude has ch.docx
 
Melissa is a 15-year-old high school student. Over the last week.docx
Melissa is a 15-year-old high school student. Over the last week.docxMelissa is a 15-year-old high school student. Over the last week.docx
Melissa is a 15-year-old high school student. Over the last week.docx
 
Measurement  of  the  angle  θ          .docx
Measurement  of  the  angle  θ          .docxMeasurement  of  the  angle  θ          .docx
Measurement  of  the  angle  θ          .docx
 
Measurement of the angle θ For better understanding .docx
Measurement of the angle θ     For better understanding .docxMeasurement of the angle θ     For better understanding .docx
Measurement of the angle θ For better understanding .docx
 
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docx
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docxMeaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docx
Meaning-Making Forum 2 (Week 5)Meaning-Making Forums 1-4 are thi.docx
 
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docx
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docxMBA6231 - 1.1 - project charter.docxProject Charter Pr.docx
MBA6231 - 1.1 - project charter.docxProject Charter Pr.docx
 
Medication Errors Led to Disastrous Outcomes1. Search th.docx
Medication Errors Led to Disastrous Outcomes1. Search th.docxMedication Errors Led to Disastrous Outcomes1. Search th.docx
Medication Errors Led to Disastrous Outcomes1. Search th.docx
 
Meet, call, Skype or Zoom with a retired athlete and interview himh.docx
Meet, call, Skype or Zoom with a retired athlete and interview himh.docxMeet, call, Skype or Zoom with a retired athlete and interview himh.docx
Meet, call, Skype or Zoom with a retired athlete and interview himh.docx
 
Medication Administration Make a list of the most common med.docx
Medication Administration Make a list of the most common med.docxMedication Administration Make a list of the most common med.docx
Medication Administration Make a list of the most common med.docx
 
media portfolio”about chapter 1 to 15 from the book  Ci.docx
media portfolio”about chapter 1 to 15 from the book  Ci.docxmedia portfolio”about chapter 1 to 15 from the book  Ci.docx
media portfolio”about chapter 1 to 15 from the book  Ci.docx
 
MediationNameAMUDate.docx
MediationNameAMUDate.docxMediationNameAMUDate.docx
MediationNameAMUDate.docx
 
Media coverage influences the publics perception of the crimina.docx
Media coverage influences the publics perception of the crimina.docxMedia coverage influences the publics perception of the crimina.docx
Media coverage influences the publics perception of the crimina.docx
 
Media Content AnalysisPurpose Evaluate the quality and value of.docx
Media Content AnalysisPurpose Evaluate the quality and value of.docxMedia Content AnalysisPurpose Evaluate the quality and value of.docx
Media Content AnalysisPurpose Evaluate the quality and value of.docx
 
Mayan gods and goddesses are very much a part of this text.  Their i.docx
Mayan gods and goddesses are very much a part of this text.  Their i.docxMayan gods and goddesses are very much a part of this text.  Their i.docx
Mayan gods and goddesses are very much a part of this text.  Their i.docx
 
Media and SocietyIn 1,100 words, complete the followingAn.docx
Media and SocietyIn 1,100 words, complete the followingAn.docxMedia and SocietyIn 1,100 words, complete the followingAn.docx
Media and SocietyIn 1,100 words, complete the followingAn.docx
 
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docx
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docxMBA 5110 – Business Organization and ManagementMidterm ExamAns.docx
MBA 5110 – Business Organization and ManagementMidterm ExamAns.docx
 

Recently uploaded

ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
Historical philosophical, theoretical, and legal foundations of special and i...
Historical philosophical, theoretical, and legal foundations of special and i...Historical philosophical, theoretical, and legal foundations of special and i...
Historical philosophical, theoretical, and legal foundations of special and i...jaredbarbolino94
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTiammrhaywood
 
Blooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxBlooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxUnboundStockton
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxmanuelaromero2013
 
DATA STRUCTURE AND ALGORITHM for beginners
DATA STRUCTURE AND ALGORITHM for beginnersDATA STRUCTURE AND ALGORITHM for beginners
DATA STRUCTURE AND ALGORITHM for beginnersSabitha Banu
 
AmericanHighSchoolsprezentacijaoskolama.
AmericanHighSchoolsprezentacijaoskolama.AmericanHighSchoolsprezentacijaoskolama.
AmericanHighSchoolsprezentacijaoskolama.arsicmarija21
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfSumit Tiwari
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Celine George
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfFraming an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfUjwalaBharambe
 
Gas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxGas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxDr.Ibrahim Hassaan
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxiammrhaywood
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Jisc
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxthorishapillay1
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentInMediaRes1
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17Celine George
 

Recently uploaded (20)

Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
Historical philosophical, theoretical, and legal foundations of special and i...
Historical philosophical, theoretical, and legal foundations of special and i...Historical philosophical, theoretical, and legal foundations of special and i...
Historical philosophical, theoretical, and legal foundations of special and i...
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
 
Blooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxBlooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docx
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptx
 
DATA STRUCTURE AND ALGORITHM for beginners
DATA STRUCTURE AND ALGORITHM for beginnersDATA STRUCTURE AND ALGORITHM for beginners
DATA STRUCTURE AND ALGORITHM for beginners
 
AmericanHighSchoolsprezentacijaoskolama.
AmericanHighSchoolsprezentacijaoskolama.AmericanHighSchoolsprezentacijaoskolama.
AmericanHighSchoolsprezentacijaoskolama.
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdfFraming an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
Framing an Appropriate Research Question 6b9b26d93da94caf993c038d9efcdedb.pdf
 
Gas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptxGas measurement O2,Co2,& ph) 04/2024.pptx
Gas measurement O2,Co2,& ph) 04/2024.pptx
 
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...
 
Proudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptxProudly South Africa powerpoint Thorisha.pptx
Proudly South Africa powerpoint Thorisha.pptx
 
ESSENTIAL of (CS/IT/IS) class 06 (database)
ESSENTIAL of (CS/IT/IS) class 06 (database)ESSENTIAL of (CS/IT/IS) class 06 (database)
ESSENTIAL of (CS/IT/IS) class 06 (database)
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media Component
 
How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17
 

Program Assignment Process ManagementObjective This program a.docx

  • 1. Program Assignment : Process Management Objective: This program assignment is given to the Operating Systems course to allow the students to figure out how a single process (parent process) creates a child process and how they work on Unix/Linux(/Mac OS X/Windows) environment. Additionally, student should combine the code for describing inter-process communication into this assignment. Both parent and child processes interact with each other through shared memory-based communication scheme or message passing scheme. Environment: Unix/Linux environment (VM Linux or Triton Server, or Mac OS X), Windows platform Language: C or C++, Java Requirements: i. You have wide range of choices for this assignment. First, design your program to explain the basic concept of the process management in Unix Kernel. This main idea will be evolved to show your understanding on inter-process communication, file processing, etc. ii. Refer to the following system calls: - fork(), getpid(), family of exec(), wait(), sleep() system calls for process management - shmget(), shmat(), shmdt(), shmctl() for shared memory support or - msgget(), msgsnd(), msgrcv(), msgctl(), etc. for message passing support iii. The program should present that two different processes, both parent and child, execute as they are supposed to. iv. The output should contain the screen capture of the execution procedure of the program. v. Interaction between parent and child processes can be provided through inter-process communication schemes, such as shared-memory or message passing schemes. vi. Result should be organized as a document which explains the
  • 2. overview of your program, code, execution results, and the conclusion including justification of your program, lessons you've learned, comments, etc. Note: i. In addition, please try to understand how the local and global variables work across the processes ii. read() or write () functions are used to understand how they work on the different processes. iii. For extra credit, you can also incorporate advanced features, like socket or thread functions, into your code. Examples: 1. Process Creation and IPC with Shared Memory Scheme =============================================== ============== #include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main(){ pid_t pid; int segment_id; //allocate the memory char *shared_memory; //pointer to memory const int size = 4096; segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR); shared_memory = (char *) shmat(segment_id, NULL, 0); pid = fork(); if(pid < 0) { //error fprintf(stderr, "Fork failed"); return 1; } else if(pid == 0){ //child process char *child_shared_memory; child_shared_memory = (char *)
  • 3. shmat(segment_id,NULL,0); //attach mem sprintf(child_shared_memory, "Hello parent process!"); //write to the shared mem shmdt(child_shared_memory); } else {//parent process wait(NULL); printf("Child process completed.n"); printf("The child process has written to the shared memory.nIt has said: %sn", shared_memory); //read from shared mem shmdt(shared_memory); shmctl(segment_id, IPC_RMID, NULL); } return 0; } =============================================== ============== 2. Process Creation and IPC with Message Passing Scheme =============================================== ============== #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #define N 20 typedef struct{ long stype; char input[N]; }msgq; int origin = 12345; int main(int argv, char * argc[]){ msgq sendq;
  • 4. msgq rcvq; size_t qlen; key_t key=1111; pid_t pid_p, pid_c; int msgid = msgget((key_t)1111, 0666| IPC_CREAT); //declare the msg queue id int shrm_id, shrm_size = 1024; //size of memory for sharing char * shrm_addr; shrm_id = shmget(IPC_PRIVATE, shrm_size, S_IRUSR | S_IWUSR); // get the id of memory for sharing shrm_addr = (char*)shmat(shrm_id, NULL, 0); pid_p = getpid(); // store parent_process_id into variable ; pid_p pid_c = fork(); // store child_process_id into variable ; pid_c //meaning of return value of fork() //value < 0 : fork is failed //value == 0 : child process //value > 0 : parent process if(pid_c < 0){ fprintf(stderr, "failed to fork()n"); // print error msg by using stderr of fprintf return 0; }else if(pid_c ==0){ printf("start of child processn"); printf("--------------------------------nn"); printf("origin : %dn", origin); origin++; printf("value of origin after origin++; : %dnn", origin);
  • 5. char * c_shrm_addr = (char *)shmat(shrm_id, NULL, 0); // give shared memory to child by using shmat() // NULL means find somewhere which has been mapped if(c_shrm_addr ==(void *) -1) // shmat() return (void *)-1 when the sharing is failed fprintf(stderr, "failed to sharen"); pid_c = getpid(); sendq.stype=1; printf("input string that will be sent to parent process : "); scanf("%s",sendq.input); //store the string for send to parent into msg queue qlen= strlen(sendq.input)+1; if(msgsnd(msgid,&sendq, qlen ,IPC_NOWAIT)<0){ perror("msgsnd"); exit(0); } else{ printf("Msgsend : %sn", sendq.input); } printf("n--------------------------------n"); printf("end of child process n"); } else { //now in parent process printf("nstart of parent processn"); printf("--------------------------------nn");
  • 6. char str[N]; int i = 0; wait(NULL); //wait until the child process finished printf("n--------------------------------n"); printf("back to the parent process n"); printf("--------------------------------nn"); printf("origin : %dn", origin); if(origin == 12345) printf("changed origin value in child is not applied to parentnn"); if(origin == 12346) printf("changed origin value in child is applied ro parentnn"); if((msgid = msgget(key,0666))<0){ //in case of error in msgget perror("msgget"); exit(1); } if(msgrcv(msgid,&rcvq,N+1,1,0)==0){ //in case of error in msgrcv perror("msgrcv"); exit(1); } printf("recieve : %snn",rcvq.input); printf("child process refers to the memory of parent : %xn", (int)shrm_addr); pid_p = getpid(IPC_PRIVATE, IPC_CREAT); printf("ID of Parent : %dn", pid_p);
  • 7. printf("ID of Child : %dn", pid_c); printf("n--------------------------------n"); printf("end of parent processnn"); } shmdt(shrm_addr); shmctl(shrm_id, IPC_RMID, NULL); return 0; } =============================================== ============== 3. Compiling and executing C codes $ cc msgpass.c -o msgpass $ ./msgpass http://linux.die.net/man/3/exec fork() creates a new process by duplicating the calling process. The new process, referred to as the child, is an exact duplicate of the calling process, referred to as the parent#include <unistd.h>pid_t fork(void); The exec() family of functions replaces the current process image with a new process image. The functions described in this manual page are front-ends for execve(2). (See the manual page for execve(2) for further details about the replacement of the current process image.) The exec() family of functions include execl, execlp, execle, execv, execvp, and execvpe to execute a file. The ANSI prototype for execl() is:
  • 8. int execl(const char *path, const char *arg0,..., const char *argn, 0) http://www.cems.uwe.ac.uk/~irjohnso/coursenotes/lrc/system/pc /pc4.htm #inciude <stdio.h> #inciude <unistd.h> main() { execl("/bin/ls", "ls", "-l", 0); printf("Can only get here on errorn"); } The first parameter to execl() in this example is the full pathname to the ls command. This is the file whose contents will be run, provided the process has execute permission on the file. The rest of the execl() parameters provide the strings to which the argv array elements in the new program will point. In this example, it means that the ls program will see the string ls pointed to by its argv[0], and the string -l pointed to by itsargv[1]. In addition to making all these parameters available to the new program, the exec() calls also pass a value for the variable: extern char **environ; This variable has the same format as the argv variable except that the items passed via environ are the values in the environment of the process (like any exported shell variables), rather than the command line parameters. In the case of execl(), the value of the environ variable in the new program will be a copy of the value of this variable in the calling process. The execl() version of exec() is fine in the circumstances where you can ex-plicitly list all of the parameters, as in the previous example. Now suppose you want to write a program that doesn't just run ls, but will run any program you wish, and pass it any number of appropriate command line parameters. Obviously, execl() won't do the job. The example program below, which implements this requirement, shows, however, that the system call execv() will perform as required: #inciude <stdio.h> main(int argc, char **argv) { if (argc==1) { printf("Usage: run <command> [<paraneters>]n"); exit(1) } execv(argv[l], &argv[1));
  • 9. printf("Sorry... couldn't run that!n"); } The prototype for execv() shows that it only takes two parameters, the first is the full pathname to the command to execute and the second is the argv value you want to pass into the new program. In the previous example this value was derived from the argv value passed into the run command, so that the run command can take the command line parameter values you pass it and just pass them on. int execl(pathname, argo, ..., argn, 0); int execv(pathname, argv); int execlp(cmdname, arg0, ..., argn, 0); int execvp(cmdname, argv); int execle(patbname, arg0, ..., arga, 0, envp); int execve(pathname, argv, envp); char *pathname, *cmdname; char *arg0, ..., *argn; char **argv, **envp; pipe() creates a pipe, a unidirectional data channel that can be used for interprocess communication. The array pipefd is used to return two file descriptors referring to the ends of the pipe. pipefd[0] refers to the read end of the pipe. pipefd[1] refers to the write end of the pipe. Data written to the write end of the pipe is buffered by the kernel until it is read from the read end of the pipe#include <unistd.h>int pipe(int pipefd[2]);#define _GNU_SOURCE /* See feature_test_macros(7) */#include<fcntl.h> /* Obtain O_* constant definitions */#include <unistd.h>int pipe2(int pipefd[2], int flags); read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.#include <unistd.h>ssize_t read(int fd, void *buf, size_t count); write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd.#include
  • 10. <unistd.h>ssize_t write(int fd, const void *buf, size_t count); close() closes a file descriptor, so that it no longer refers to any file and may be reused. Any record locks (see fcntl(2)) held on the file it was associated with, and owned by the process, are removed (regardless of the file descriptor that was used to obtain the lock). If fd is the last file descriptor referring to the underlying open file description (seeopen(2)), the resources associated with the open file description are freed; if the descriptor was the last reference to a file which has been removed using unlink(2) the file is deleted.#include <unistd.h>int close(int fd); Sample Program 1 /**************************************************** ************ * * Example: to demonstrate fork() and execl() and system calls * ***************************************************** **********/#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/wait.h>int main( int argc, char *argv[], char *env[] ){ pid_t my_pid, parent_pid, child_pid; int status;/* get and print my pid and my parent's pid. */ my_pid = getpid(); parent_pid = getppid(); printf("n Parent: my pid is %dnn", my_pid); printf("Parent: my parent's pid is %dnn", parent_pid);/* print error message if fork() fails */ if((child_pid = fork()) < 0 ) { perror("fork failure"); exit(1); }/* fork() == 0 for child process */ if(child_pid == 0) { printf("nChild: I am a new- born process!nn"); my_pid = getpid(); parent_pid = getppid(); printf("Child: my pid is: %dnn", my_pid); printf("Child: my parent's pid is: %dnn", parent_pid); printf("Child: I will sleep 3 seconds and then execute - date - command nn"); sleep(3); printf("Child: Now, I woke up and am executing date command nn"); execl("/bin/date", "date", 0, 0); perror("execl() failure!nn"); printf("This print is after execl() and should not have been executed if execl
  • 11. were successful! nn"); _exit(1); }/* * parent process */ else { printf("nParent: I created a child process.nn"); printf("Parent: my child's pid is: %dnn", child_pid); system("ps -acefl | grep ercal"); printf("n n"); wait(&status); /* can use wait(NULL) since exit status from child is not used. */ printf("n Parent: my child is dead. I am going to leave.n n "); } return 0;} Sample Program 2 Execution > gcc –o proc proc.c> gcc –o fibo fibo.c> gcc –o pipe pipe.c> ./proc proc.c#include <stdio.h>#include <sys/shm.h>#include <sys/stat.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t pid; int segment_id; //allocate the memory char *shared_memory; //pointer to memory const int size = 4096; segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR); shared_memory = (char *) shmat(segment_id, NULL, 0); pid = fork(); if(pid < 0) { //error fprintf(stderr, "Fork failed"); return 1; } else if(pid == 0){ //child process char *child_shared_memory; child_shared_memory = (char *) shmat(segment_id,NULL,0); //attach mem sprintf(child_shared_memory, "Hello parent process!"); //write to the shared mem shmdt(child_shared_memory); execl("./pipe", "pipe", "3", 0); /* to call pipe program */ execl("./fibo", "fibo", "12", 0); /* to call fibo program */ } else {//parent process wait(NULL); printf("Child process completed.n"); printf("The child process has written to the shared memory.n It has said: %sn", shared_memory); //read from shared mem shmdt(shared_memory); shmctl(segment_id, IPC_RMID, NULL); } return 0;}
  • 12. fibo.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <string.h>int fibo(int num);int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "argc %d n", argc); fprintf(stderr, "argv[0]: %s >n", argv[0]); fprintf(stderr, "argv[1]: %s >n", argv[1]); fprintf(stderr, "Usage: %s <string>n", argv[0]); exit(EXIT_FAILURE); } int num = atoi(argv[1]); printf( "%d'th Fibonacci number is %dn", num, fibo(num)); exit(EXIT_SUCCESS);} /* end of main */ int fibo(int num) { if (num > 0) { if (num <=2) { return 1; } else { return fibo(num-1) + fibo(num-2); } } else { return -1; }} /* end of fibo() */ pipe.c#include <stdio.h>#include <stdlib.h>#include <sys/shm.h>#include <sys/stat.h>#include <sys/wait.h>#include <sys/types.h>#include <unistd.h>#include <string.h>int segmentId;char *sharedMemory;int main(int argc, char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc != 2) { fprintf(stderr, "argc %d n", argc); fprintf(stderr, "argv[0]: %s >n", argv[0]); fprintf(stderr, "argv[1]: %s >n", argv[1]); fprintf(stderr, "Usage: %s <string>n", argv[0]); exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ close(pipefd[1]); /* Close unused write end */ while (read(pipefd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); write(STDOUT_FILENO, "n", 1); _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ close(pipefd[0]); /* Close unsed read end */ write(pipefd[1], argv[1], strlen(argv[1])); close(pipefd[1]); /* Reader will see EOF */ wait (NULL); /* Wait for child */ exit(EXIT_SUCCESS); }}