Write a program that does the following:
- When the program start fork a new child process. The father process should wait for the child process to finish.
- The child process main thread should spawn 5 additional threads.
- Each thread should print: “I am thread number n” and terminate.
- The child process main thread should wait for all it’s threads to terminate. It should then print “Bye” and exit.
- When the child exists, the father should print “Goodbye” and exit
reference:
- To create a child process use – fork (man 2 fork)
- To wait for a child process use wait (man 2 wait)
- to create a new thread use pthread_create (man pthread_create)
- to wait for a child thread to exit use pthread_join (man pthread_join)
Task 2
- build 5 processes that runs forever – each one print message every 5 seconds
- the main process create its children and wait until they die
- if a child process die – the main create it again
#include<stdio.h>
void task1(void)
{
while(1){
puts("task1");
sleep(5);
}
}
void task2(void)
{
while(1){
puts("task2");
sleep(5);
}
}
void task3(void)
{
while(1){
puts("task3");
sleep(5);
}
}
void task4(void)
{
while(1){
puts("task4");
sleep(5);
}
}
void task5(void)
{
while(1){
puts("task5");
sleep(5);
}
}
void main(void)
{
int id,i,s;
for (i=0;i<5;i++)
{
id = fork();
if(id == 0)
{
// todo: call a function task[n]
exit(0);
}
}
while(1)
{
//TODO: wait and restore a dead process
}
}
- run the app – you will see a message every 5 second
- open a new terminal
- use ps aux to see all tasks – look at the process id
- use kill -9 [pid] to kill one task
- look at the output to see it restarted