Здравствуйте, как модифицировать программу, так что бы сообщения дочерних процессов выписывались через программу, через функцию 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;

}









 , , , ,






URL записи