Здравствуйте, как модифицировать программу, так что бы сообщения дочерних процессов выписывались через программу, через функцию execl(), В родительском процессе реализовать функцию wait() (родительский процесс ожидает завешение всех дочерних процессов и выводит сообщение о том какой дочерний процесс завершился и с каким статусом). Для функций fork(), execl(), wait() реализовать обработку ошибок с помощью библиотечной функции perror(). Почему здесь создаеться 4 процесса?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void identifiers(); // function that display identifiers
void forkCalls(); // function that calls fork() function 3 times
void tree(int pid); // function displaying processes tree
int main(void)
{
identifiers();
printf("Parent pid: %d ppid: %d\n", getpid(), getppid());
printf("Child processes: \n");
forkCalls();
return 0;
}
void forkCalls()
{
int k;
//int status;
int pid;
for(k = 0; k < 3; k++)
{
pid = fork();
switch(pid)
{
case -1:
perror("fork error");
exit(1);
break;
case 0:
execl("./program1_1", "./program1_1",)
exit(0);
default:
tree(getpid());
wait(&status);
sleep(1);
break;
}
}
}
void identifiers()
{
pid_t pid = getpid();
pid_t ppid = getppid();
pid_t uid = getuid();
pid_t gid = getgid();
printf("\nPID:%d PPID:%d UID:%d GID:%d\n", pid, ppid, uid,
gid);
}
void tree(int pid)
{
char pstree[] = "pstree -np ";
char cmd[17];
sprintf(cmd, "%s %d", pstree, pid);
system(cmd);
}
program1_1
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main (void)
{
pid_t pid = getpid();
pid_t ppid = getppid();
pid_t uid = getuid();
pid_t gid = getgid();
/*printf("PID: %d\n", pid);
printf("PPID: %d\n", ppid);
printf("UID: %d\n", uid);
printf("GID: %d\n", gid);*/
printf("\nPID:%d PPID:%d UID:%d GID:%d ", pid, ppid,
uid, gid);
//fprintf (stderr, "Press <Enter> to exit...");
getchar ();
return 0;
}