fork(), execve(), ...

Ing. Pavel PaJaSoft Janousek janousek na fonet.cz
Středa Duben 11 13:55:37 CEST 2001


>   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 ...

	Ja bych v tom nevidel az takovy problem - PID vaseho syna znate (vrati
Vam ho fork) - execve vymeni kod, ale PID zustane zachovan (man 2 execve
- The program invoked  inherits the  calling  process's PID, and any
open file descriptors that are not set to close on exec. Signals pending
on the calling process are cleared.) => mate uz dost informaci jak
identifikovat proces - dite B, protoze pouze rodic procesu B je PID
vaseho ditete... => az v systemu nebude zadny proces jehoz rodic bude
tento PID, vite, ze dite B ukoncilo svou cinnost. Samozrejme, ze kazdy
OS ma urcity zpusob, jak znovu pouziva pridelene PIDy, ale verim, ze
masinku neokupuji desitky tisic soucasne bezicich ci spicich procesu.

	Otazku prakticke implementace necham na Vas, zalezi na tom, jak moc
portabilni reseni chcete mit, nejbrutalnejsi zpusob je pres /proc/,
nejportabilnejsi vidim pres volani PS s patricnymi parametry a
vykousanim informace - IMHO wrapper lze napsat i ve skritovacim jazyce.

> P.S. Samozrejme puvodni program nemuzu modifikovat.

	Takove situace znam, treba odzkouseny program ve fortranu...;-)

-----------------------------------------------------------------------
Ing. Pavel Janousek (PaJaSoft)                 FoNet, spol. s r. o.
Vyvoj software, Intranet / Internet          Anenska 11, 602 00  Brno
E-mail: mailto:Janousek na FoNet.Cz             Tel.: +420  5  4324 4749
SMS:    mailto:P.Janousek na SMS.Paegas.Cz      Fax.: +420  5  4324 4751
WWW:    http://WWW.FoNet.Cz/               E-mail: mailto:Info na FoNet.Cz
-----------------------------------------------------------------------


Další informace o konferenci Linux