Portál AbcLinuxu, 8. května 2025 03:17
myprogram sleep 60 # sleep ako príkladmyprogram by mal spustiť zadané argumenty, dostať PID nového procesu a viac sa o nový proces nestarať. Aspon nie priamo. Zvládol som to s execvp, ale problém je že child proces neskončí. Cez ps -ef ho vidno ako 'defunct' - ked použijem ako argument echo, tak vytlačí čo má ale ostane existovať. Takže čo by som mal použiť aby ten child proces sa správal normálne a ukončil sa.... Len pripomínam, že potrebujem to PID Dakujem
Řešení dotazu:
SIGCHLD
na SIG_IGN
resp. SA_NOCLDWAIT
.
sigaction(SIGCHLD, &(struct sigaction){.sa_handler = SIG_IGN}, NULL)
To bych nedoporučoval. Teoreticky je možné, že potomek už skončil, ale mezitím se spustil nový proces, který má náhodou stejné PID, jako měl ten potomek.
Spolehlivější je waitpid(pid, &status, WNOHANG)
waitpid()
.
while (waitpid(pID,&status,WNOHANG) == 0) { #pID je PID childu cout << "process zije \n"; # tu bude samozrejme nieco ine sleep (1); }toto iteruje dokiaľ child existuje, teda dokiaľ zmysluplne existuje... možno som sa nevyjadril jasne čo chcem :(, ale v každom prípade vďaka...
waitpid(pid, &status, WNOHANG)
mohlo skončit chybou, pokud je parametr pid
v pořádku, ale přesto bych doporučoval zvyknout si počítat i s touto možností a nepočítat automaticky s tím, že nenulová hodnota znamená, že potomek skončil.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.