• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Linux fork - proces potomny i macierzysty

Object Storage Arubacloud
0 głosów
835 wizyt
pytanie zadane 11 stycznia 2019 w C i C++ przez poldeeek Mądrala (5,980 p.)
Witam, czy istnieje sposób na sprawdzenie w funkcji macierzystej czy proces potomny trwa lub się zakończył ?
Musze zakończyć program i to funkcja potomna decyduje kiedy to jest, a w funkcji macierzystej mam pętlę while(1), więc może istnieje jakaś funkcja sprawdzająca istnienie funkcji potomnych ???

1 odpowiedź

0 głosów
odpowiedź 11 stycznia 2019 przez RafalS VIP (122,820 p.)
wybrane 12 stycznia 2019 przez poldeeek
 
Najlepsza
wait(NULL);

W procesie macierzystym.

https://stackoverflow.com/a/42426884

komentarz 11 stycznia 2019 przez poldeeek Mądrala (5,980 p.)
Tak, ale funkcja wait z tego co wiem chyba blokuje całkowicie proces macierzysty, a ja chciałbym aby oba stale działały. Proces macierzysty ciągle wykonuje pewne operacje i ma przestać, i zakończyć się w tym samym czasie co proces potomny..
komentarz 12 stycznia 2019 przez poldeeek Mądrala (5,980 p.)
edycja 12 stycznia 2019 przez poldeeek

Mam jeszcze pytanie. Chcę zrobić w procesie macierzystym obsługę sygnału np. SIGINT jako zakończenie procesu macierzystego.  Czy jeśli w procesie potomnym napiszę coś takiego 

			kill(getppid(), SIGINIT);
			exit(1);

 I w procesie macierzystym 
 

signal(SIGINT, sgnhandle);

i w funkcji sgnhandle po prostu wywowałam exit(1), to czy coś takiego ma prawo zadziałać ? Bo szczerze mówiąc próbuje coś takiego napisać ale nie działa i nie wiem czy ja coś źle pisze w kodzie, czy w ogóle takie rozwiązanie nie może istnieć...

komentarz 12 stycznia 2019 przez RafalS VIP (122,820 p.)

Musisz robić coś źle, bo mi to działa:

#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include <stdlib.h>
#include <sys/types.h>

void sig_handler(int signo){
    if(signo == SIGINT){
        printf("How could you do this to me?\n");
        exit(1);
    }
}

int main() 
{ 
    if (fork() == 0) 
    {
        // give parent some time to setup handler
        sleep(2);
        kill(getppid(),SIGINT);
        while(1) {sleep(1); printf("I'm still standing\n");}
    }
    else{
        signal(SIGINT,sig_handler);
        while(1) sleep(1);
    }
}

 

komentarz 12 stycznia 2019 przez poldeeek Mądrala (5,980 p.)
edycja 12 stycznia 2019 przez poldeeek
Dobra faktycznie działa, już zlokalizowałem błąd.
Mam jeszcze pytanie czy lepsze jest tutaj używanie funkcji signal czy sigaction ?
I czy powieninem coś podać jako argument Wait(arg), czy samo wait() wystarczy, ponieważ chcę się upewnić, że na 100% potomek zakończy się jako pierwszy, czyli po wysłaniu sygnału wykona funkcję exit(1), zanim zakończy działanie proces macierzysty.

Podobne pytania

0 głosów
1 odpowiedź 1,257 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez profesorek96 Szeryf (91,420 p.)
+2 głosów
3 odpowiedzi 1,627 wizyt
pytanie zadane 6 stycznia 2016 w C i C++ przez Wilier Bywalec (2,570 p.)
0 głosów
2 odpowiedzi 540 wizyt
pytanie zadane 1 grudnia 2016 w C i C++ przez bart1996 Początkujący (360 p.)

92,583 zapytań

141,434 odpowiedzi

319,668 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...