• 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

VPS Starter Arubacloud
0 głosów
824 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,235 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez profesorek96 Szeryf (91,420 p.)
+2 głosów
3 odpowiedzi 1,606 wizyt
pytanie zadane 6 stycznia 2016 w C i C++ przez Wilier Bywalec (2,570 p.)
0 głosów
2 odpowiedzi 527 wizyt
pytanie zadane 1 grudnia 2016 w C i C++ przez bart1996 Początkujący (360 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...