Question

Assign tasks to child process using fork in C language usage: ./a.out 1000, 3000 ... The...

Assign tasks to child process using fork in C language

usage: ./a.out 1000, 3000 ...

The program does total of n tasks using fork. In each child process, it sums up from 0 to the current argument and then print out the result

for example, for argv[1]=1000, it sums up from 0 to 1000, then print out the result. then in another child process, it sums up 0 to 3000 then print out the result.

Pls write it in C language using fork

0 0
Add a comment Improve this question Transcribed image text
Answer #1

//Pls provide +ve rating

//since all local variable or global variables are not shared between child and parent , I am using shared memory to get the which number limit child has to execute its loop to find out sum.

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include<sys/wait.h>

int main(int argc,char **argv)
{
int pid,i;
int no_children,parent_id,sum=0,n;
//used shared memory to check on value of j
int *j;
int shmid = shmget(1000,1024,0666|IPC_CREAT);
j = (int*) shmat(shmid,(void*)0,0);
*j=1;
parent_id=getpid();
if(argc < 2)
{
printf("Usage: %s integer1 integer2 ... integern\n",argv[0]);
return -1;
}
//argv[0] is for program name, total number of chilren to be created is argc-1
no_children=argc-1;
//create n number of no_children
for(i = 0; i < no_children; i++)
{
pid=fork();
if(pid==0 && getppid() == parent_id) //child process
{
n=atoi(argv[*j]);
for(i = 0; i < n; i++)
{
sum+=i;
}
++(*j);
printf("Child of parent %d with pid %d of and sum from 0 to %d is %d\n",getppid(),getpid(),n,sum);
exit(0);
}
else if(getpid() == parent_id) //parent process
{
//printf("Parent process with pid %d waiting for it's chil(dren) to finish their job\n",getpid());
wait(0);
}
}
//detach shared memory
  
shmdt(j);
  
// delete shared memory
shmctl(shmid,IPC_RMID,NULL);
return 0;
}

========================

program run without arg

./a.out

//output1

Usage: /home/a.out integer1 integer2 ... integern

======================

//rpogram run with

./a.out 1000 3000

//output2

Child of parent 5 with pid  6 of and sum  from 0 to 1000 is 499500                                                                   

Child of parent 5 with pid  7 of and sum from 0 to 3000 is 4498500  

=======================

//program run with 4 numbers

./a.out 1000 3000 2500 2000

//output3

Child of parent 5 with pid 6 of and sum from 0 to 1000 is 499500   
Child of parent 5 with pid 7 of and sum from 0 to 3000 is 4498500
Child of parent 5 with pid 8 of and sum from 0 to 2500 is 3123750
Child of parent 5 with pid 9 of and sum from 0 to 2000 is 1999000

====================

//rpogram run with 5 args

./a.out 1000 3000 2500 2000 20

//output4

Child of parent 5 with pid  6 of and sum from 0 to 1000 is 499500                                                                   

Child of parent 5 with pid  7 of and sum from 0 to 3000 is 4498500                                                                  

Child of parent 5 with pid  8 of and sum from 0 to 2500 is 3123750                                                                  

Child of parent 5 with pid  9 of and sum from 0 to 2000 is 1999000                                                                  

Child of parent 5 with pid  10 of and sum from 0 to 20 is 190

Add a comment
Know the answer?
Add Answer to:
Assign tasks to child process using fork in C language usage: ./a.out 1000, 3000 ... The...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • Write a program in C using the fork() system call to do the following. The parent process (main program) forks a process...

    Write a program in C using the fork() system call to do the following. The parent process (main program) forks a process (CHILD 1) to compute and print the sum of first n integers where n is a variable shared between the parent and CHILD 1. It also forks another process (CHILD 2) that finds the sum of squares of the first n numbers where n is a variable it shares with the parent. Let CHILD 1 print “The sum...

  • Command line input In C++ it is possible to accept command line arguments. Command-line arguments are...

    Command line input In C++ it is possible to accept command line arguments. Command-line arguments are given after the name of a program in command-line operating systems like Linux and are passed in to the program from the operating system. To use command line arguments in the program, it must first understand the full declaration of the main function, which until now has accepted no arguments. In fact, main can accept two arguments: one argument is number of command line...

  • Write code that forks into two processes: a parent process, and a child process. Same as...

    Write code that forks into two processes: a parent process, and a child process. Same as the Regular version, except that your code must also be able to handle negative integers input from the command-line. If I call your code this way:     a03 -3 5 -7 The parent process should print out: Assignment 3     sum = -5 The sums produced from the test input I use will be in the range [-128 .. 127] -------------------------------------------------------------------------------------------------------------------- // Numbers from...

  • C LANGUAGE PROGRAM: You have the program that creates a parent and child. They communicate via...

    C LANGUAGE PROGRAM: You have the program that creates a parent and child. They communicate via the pipe. The parent writes into the pipe and child reads the data from the pipe. All you got to is replace FILL_IN_THE_BLANK with appropriate values or function names and just type the values of each TASKS, I don't need the c program. TASK_1 = TASK_2 = TASK_3 = TASK_4 = 4 of them [ 5 points each ] -------------------------------------------------------------------------------------------- When you run the...

  • Write code that forks into two processes: a parent process, and a child process. Your code...

    Write code that forks into two processes: a parent process, and a child process. Your code will be called with command-line arguments consisting of negative integers. Do not worry about bad command-line arguments such as "xyz". Your code will not be tested in this way. The parent process will take the arguments to main(), convert them into ints by calling atoi(), and send those ints one at a time to the child process through a pipe (one call to write()...

  • follow the steps below to create a C program a) In the main function, fork a...

    follow the steps below to create a C program a) In the main function, fork a child process. b) In the child process, using an infinite loop to print out something. For example, you can print out the value of an int variable and each iteration increase the value of this int variable. You may also optionally sleep for a second or two in the loop to slow down the loop. c) In the parent process, sleep for a few...

  • using C codding language, Write a program for following tasks: 1. get string (character array) from...

    using C codding language, Write a program for following tasks: 1. get string (character array) from user and save it in char input. Assume maximum size of input is going to be 50 characters. 2. print out given input on the screen. 3. print out size of given input. (Hint: sizeof function)

  • *Write a parallel program pie.c in C or C++ (pie.cc) for Linux that computes an approximation of the number π using a se...

    *Write a parallel program pie.c in C or C++ (pie.cc) for Linux that computes an approximation of the number π using a series with N+1 terms.* --The series sum is partitioned in T non-overlapping partial sums, each computed by T separate child processes created with the fork() library function.* --This program demonstrates data parallelism and interprocess communication using pipes. Each child process could perform a (potentially) long computation on a separate CPU (or core). Depending on the computer architecture, the...

  • Assignment: Using the Fork System Call The Collatz conjecture concerns what happens when we take any...

    Assignment: Using the Fork System Call The Collatz conjecture concerns what happens when we take any positive integer n and apply the following algorthm: n={n / 2 , if n is even 3 * n + 1 , if n is odd The conjecture states that when this algorithm is continually applied, all positive integers will eventually reach 1. For example, if n = 35, the sequence is:  35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2,...

  • Source code to modify: #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main() { pid_t pid; /*fork...

    Source code to modify: #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main() { pid_t pid; /*fork a child process*/ pid = fork(); if (pid<0){ /*error occured*/ fprintf(stderr,"Fork failed\n"); return 1; } else if (pid == 0) { /*child process */ printf("I am the child %d\n",pid); execlp("/bin/ls","ls",NULL); } else { /*parent process */ /*parent will wait for the child to complete*/ printf("I am the parent %d\n",pid); wait(NULL); printf("Child Complete\n"); } return 0; } 1. Write program codes for 3.21 a and...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT