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