[FreeBSD] vfork

Zahemszky Gabor zgabor at CoDe.hu
1999. Nov. 29., H, 13:48:04 CET


Hello!

>      vfork() is unsafe in multi-thread applications.
> 
>      This function will be eliminated in a future  release.   The
>      memory  sharing semantics of vfork() can be obtained through
>      other mechanisms.

Ha raerek, elobanyaszom az agyam baromi hatso zugabol, hogy mi is a baj
a vfork-kal (vagy legalabb azt, hogy hol lattam a leirast)

> namarmost az a problemam, hogy fut egy progim, ami jol meg tud hizni,
> jocskan 20 mbyte folott foglal a memoriaban, thread-es, fut kb 30 thread
> az egyik threadnek el kellene inditani egy kulso progit, fork-ol egyet,
> execv, stb
> 
> viszont a fork ekkor az egesz 20 mbyte memoriat lemasolja, ami nekem nem
> tetszik tobb szempontbol, reszben 20 megat lemasolni is sokaig tart,
> reszben, ha ez egyszerre 10 thread-el esik meg, az 200 mega, stb

En nem akarok bolcsebbnek latszani annal, mint amilyen vagyok, (az is boven
eleg), de ha emlekeim nem csalnak a Jujnikszok par eve cow (Copy-On-Write)
technikat hasznalnak, meg lapozast, es ez nagyreszt kikuszoboli a fork hibajat.
De ha nagy - vagy nem nagy csak egyaltalan - baromsagot mondtam, Pink vagy
mas ugyis kijavit.  Bar abbol, hogy O errol semmit nem irt, valami gyanus,
buzos dolog latszik.

> a vfork jonak tunik, kiveve a fent idezett, nem tul biztato
> ellenjavallatot

Mint Pink is irta, ez bizony mar jo nehany eve ott van, mint pl. SYSV-ben a
termcap is obsolete! uzenet, oszt kit zavar.

> vajon mi lehet az az 'other mechanisms' amivel vfork hasznalata nelkul ki
> lehet kuszobolni a gondomat ???

Rendes virtualis memoriakezeles oprecer oldalrol.  De majd meg gondolkodom.

ZGabor at CoDe dot HU

-- 
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ ';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? ]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? ]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;X=;for i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;X="$X $i";typeset +l i;};print "$X"



További információk a(z) BSD levelezőlistáról