LINUX.ORG.RU

fork(), exec(), wait()

 , , ,


0

1

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

}


Последнее исправление: alpha (всего исправлений: 2)

Будь добр, попроси сначала у препода методичку в электронном виде. Не только условия копипастить будет удобнее, но и, глядишь, ответы на свои вопросы найдешь, или хотя бы задавать их начнешь. Если не начнешь — не беда, но тогда и пиши в Job хотя бы что ли.

t184256 ★★★★★
()

LOR - форум помощи студентам

★ — преподаватель
★★ — старший преподаватель
★★★ — доцент
★★★★ — профессор
★★★★★ — декан факультета, последняя надежда перед отчислением
deadplace
()
Последнее исправление: deadplace (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.