Skrypt z procesami

0

Witam, mam taki skrypt:

#include<stdio.h>
int main()
{
    int pid;
    char cmd[80];
    
    gets(cmd);
    
    if((pid = fork()) == 0)
    {
        printf("Proces potomny u numerze %d\n",pid);
        execl("/bin/bash","bash","-c",cmd,NULL);
        printf("Koniec wykonania polecenia\n");
    }
    else
    {
        printf("Proces macierzysty o numerze %d\n", pid);
        printf("Druga linia procesu macierzystego o numerze %d\n",pid);
    }
}

Czy ktoś może powiedzieć mi, dlaczego przy podaniu na przykład polecenia 'pwd', nie zostaje wydrukowana już linijka printf("Koniec wykonania polecenia\n"); ?

0

Dzieje się tak, ponieważ execl zastępuje Twój proces. Gdy funkcja execl wykonuje się poprawnie, czyli nie zwróciła błędu (udało jej się uruchomić podany process), to Twojego procesu już nie ma ;(

execl zastepuje calkowicie proces i kopjuje sobie kilka przydanych rzeczy takich jak: identyfikatory procesów, aktualny katalog,maski rygle, sygnaly i jeszcze kilka, natomiast proces zostaje zastąpiony nowym.

Gdy execl zakonczy się niepowodzeniem wtedy zobaczysz swój komunikat.

0
date
proces macierzysty, nr 31159 
proces macierzysty, druga linia
proces potomny, nr 0 
laptop:c nick$ pon 23 sty 22:44:48 2017 CET
// czy ktoś może wytłumaczyć mi, dlaczego w tym miejscu nie pojawia się znak zachęty, tylko program czeka na kolejne polecenie i dopiero po nim wyskakuje znak zachęty widoczny poniżej?
laptop:c nick$ 
0

Użyj system( cha *command ) zamiast exect albo forkuj przed exec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1