fork n process


 
Thread Tools Search this Thread
Top Forums Programming fork n process
# 1  
Old 05-18-2011
fork n process

Making a C program (process PP) that satisfies the following requirements:
1. Pp receives 3 ≤ N ≤ 10 arguments on the command line invocation, to interpret
as a whole and thus should be 1 ≤ Ni ≤ 4;
2. Pp initially will have to create N processes Pi children facing a range of life
to
random 1 ≤ I ≤ 5 seconds, display a message and terminate;
3. whenever the i-th child process exits, the parent must decrease the value of Pp
Ni and create a new child for only if Ni Pi ≥ 0:
• If Ni> 0, PP have to create a new child with the behavior described in
previously;
• If Ni = 0, PP have to create a new child that is running the program / ​​usr / bin / xmessage
No argument with son [i] end and finish;
4. when all the children are not `finished and can create other processes (Ni = -1, ∀ Ni)
and
Pp displays a final message and ends too.

I used an array to store all the pid and the Ni process.

Code:
for(c=0;c<(argc-1) && (c==0 || child[c-1].pid!=0);c++){
            if ((child[c].pid = fork()) < 0){
                  perror("fork error");
                  exit(1);
            }  
        child[c].N=atoi(argv[c+1]);
    }

Is that right?

how can I then work on individual processes?
# 2  
Old 05-18-2011
You are going to fork() far more than the process you think you are doing.
Code:
pid_t pid =0;
int i=0;
int status=0;
for(i=0< i< 10; i++)
{
     pid=fork();
     switch (pid)
     {
          case 0:  // this is the child process
               // work with the process here
               // 
               exit(0);   // do not get out of this block of code in the child
               break;
          case -1:  // error
               perror("failed to fork a new process");
               exit(1);
               break;
          default:  // parent process  
              
     }
     // wait for the kids to exit
     errno=0;
     // when no more children wait reutrns -1 and sets errno to ECHILD
     while( (pid=wait(&status) )>0 );
     if(errno==ECHILD)
        exit(0);
     else
     {
        perror("Error waiting for child");
        exit(1);
      }
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sleep 600 or fork/spawn a process or daemon?

Hi, I have a script that run every 10 minutes, from a specific timeframe of the day, for example 0500 - 1900. The script is some sort of checker script for an application log file and check for errors and email us if there is error/s reported in the log. At the moment, I schedule it... (1 Reply)
Discussion started by: newbie_01
1 Replies

2. Programming

Problem with fork() and execlp process

Hello everyone, this is my first post. I have a task to use a fork to create multiple processes and then use execlp to run another program to add 2 numbers. The problem I am having is we are supposed to use the exit() call in the execlp to return the small integer. This is a bad way to... (3 Replies)
Discussion started by: Johnathan_1017
3 Replies

3. Programming

Generating Random Number in Child Process using Fork

Hello All, I am stuck up in a program where the rand functions ends up giving all the same integers. Tried sleep, but the numbers turned out to be same... Can anyone help me out how to fix this issue ? I have called the srand once in the program, but I feel like when I call fork the child process... (5 Replies)
Discussion started by: manisum
5 Replies

4. Programming

Timed action after fork() in parent process

Assume you have such a piece of (more or less pseudo-)code: if(fork() == 0) {// childprocess chmod(someProgram, 00777); exec(someProgram); } else { // assume it never fails and this is the parent chmod(someProgram, 00000); // should be executed as soon as possible after the... (5 Replies)
Discussion started by: disaster
5 Replies

5. Red Hat

Fork wait in background process - large delay

hi all, We are trying to run a process in the background and in the process we call fork ;and wait for the child process to finish .We find that the died = wait(&status); happens after 10 seconds randomly and sometimes completes in time (within 1 sec) This behavior is seen only when the... (0 Replies)
Discussion started by: vishnu.priya
0 Replies

6. UNIX for Dummies Questions & Answers

cannot fork process on IBM - AIX

Hi, Currently, I'm getting the foll error on an IBM AIX /etc/profile: 0403-030 The fork function failed. Too many processes already exist. How can i check the current no. of processes which can run simultaneously on an IBM AIX machine for oracle user and how can i change ? Thanks Vin (1 Reply)
Discussion started by: win_vin
1 Replies

7. Programming

Multiple process using fork()

I have a code which has four different process, each printing different message. I have provided it with user input (implemented using thread), depending on which the corresponding message from that process has to be printed.The code is shown below.when I run the pgm, it takes input such as... (1 Reply)
Discussion started by: shashi
1 Replies

8. HP-UX

error : can not fork new process

hi today we came across error "can not fork new process" when i checked there were 400 ksh processes were running for that particular user ( due to kernel parameter setting no of processes were restricted to 400 ) and the reason for this was somebody executed shell script which had "*" ( only *... (3 Replies)
Discussion started by: zedex
3 Replies

9. UNIX for Dummies Questions & Answers

Cannot fork , too many process - SCO Unix 5.05

I need a help... I have a HP Netserver LH 6000 U with Hardware Raid . Sco 5.0.5 installed with Oracle database. Total number of users, normally logged in are around 60 nos. The system is very slow ( takes 6 hours for processing one Lakh bills) during the Billing process. Also it is... (1 Reply)
Discussion started by: saleeshpl
1 Replies

10. Programming

Reference Variables To A Child Process Created With Fork

Hi! IN THE FOLLOWING PROGRAM THE VALUE OF j REMAINS UNCHANGED . WHY ? IF I WANT A VARIABLE VALUE TO CHANGE LIKE THIS , IS THERE ANY WAY TO DO IT ? Or do we have to use shared memory variables? main() { int return_pid, i, total; int j=1; total = TOTALRECS+1; for... (2 Replies)
Discussion started by: AJAY BHATIA
2 Replies
Login or Register to Ask a Question