45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
// create a number N of child processes specified via commandline argument
|
|
// each child sleeps for a random time between 1 and 5 seconds
|
|
// each child prints its PID and the time it slept
|
|
// the parent waits for all children to finish and then exits
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/wait.h>
|
|
|
|
int main(int argc, char *argv[]) {
|
|
if (argc != 2) {
|
|
fprintf(stderr, "Usage: %s <number of children>\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
int n = atoi(argv[1]);
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
pid_t pid = fork();
|
|
if (pid < 0) {
|
|
perror("fork");
|
|
return 1;
|
|
}
|
|
|
|
if (pid == 0) {
|
|
// child
|
|
srand(getpid());
|
|
int sleep_time = 1 + rand() % 5;
|
|
printf("Child %d with PID %d will sleep for %d seconds\n", i, getpid(), sleep_time);
|
|
sleep(sleep_time);
|
|
printf("Child %d with PID %d slept for %d seconds\n", i, getpid(), sleep_time);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// parent
|
|
for (int i = 0; i < n; i++) {
|
|
int status;
|
|
wait(&status);
|
|
}
|
|
|
|
return 0;
|
|
}
|