fork(), execve(), ...

Ondrej Martinek martinek na gncz.cz
Středa Duben 11 14:24:02 CEST 2001


Robert Vojta wrote:
> 
> Zdravim,
>   mam jeden program, ktery se forkne, jeho dite neco vyrabi a rodic se ukonci
> bez cekani na konec ditete. No a ja potrebuju napsat wrapper, ktery bude
> tento program poustet, ale bude cekat na stav ditete toho programu. Tj.
> neco takoveho:
> 
>   muj wrapper
>       |
>   pid = fork()
>       |
>       | -- child --> execve()
>       |      tady pustim puvodni program
>       |                 |
>       |        signal(SIGCLD,SIG_IGN)
>       |               fork()
>       |                 |
>       |                 | -- child --> tady neco dela  (dite B)
>       |                 |
>       |      ukonci se bez cekani na dite
>       |
>  waitforpid(pid,...)
>       |
>   no a tady cekam na to, az se ukonci puvodni program, resp. moje dite,
> jenze to se ukonci jeste driv nez dite (B) puvodniho programu. Potrebuju
> po ukonceni behu ditete (B) provest nejakou akci (zavisla na dokonceni toho
> ditete B) a az potom ukoncit wrapper. Napada nekoho neco jak na to? Spis
> bych si tipl, ze to nejak normalne nepujde ...
> 
>   R.obot.V
> 
> P.S. Samozrejme puvodni program nemuzu modifikovat.

jestli sem to dobre pochopil, tak potrebujes nejak ziskat pid potomka
toho programu a pockat dokud nezkonci.  bez spoluprace puvodniho
programu me napada akorat pouzit /proc (nebo /bin/ps).  nejdriv polozky
projdes a podle PPID najdes potomka, pak pockas az program skonci pomoci
wait(), a nakonec v cyklu testujes jestli proces potomeka stale existuje
v /proc (nebo /bin/ps).

nic lepsiho me nenapada. ;)

--ondra


Další informace o konferenci Linux