Miroslav Lachman wrote:
Mam na zacatek takovy trivialni dotaz: k cemu slouzi procfs a fdescfs
napriklad pro Bash a OpenJDK?
Na takovouhle otazku nelze odpovedet obecn - jen konkretne.
Bash, pokud spravne nahlednutim do zdrojaku soudim, fdescfs v zasade
nepouziva. Akorat bez nej nefunguje presmerovani na /dev/fd/... - takze
se da rict, ze fdescfs potrebujes k tomu, aby bash umel vsechno co je v
manualu napsane, ze umi.
To Java je jinej bumbrdlicek, takze daleko slozitejsi odpoved. Ono se v
kodu ne uplne lehce poznava, kdy se konkretni kod pouziva i na FreeBSD a
kdy jen na nejakem jinem OS. Urcite se ale pouziva /proc/curproc/map
takze bez nej nebude fungovat napriklad funkce
getCommittedVirtualMemorySize(). Zda to opravdu bude necemu vadit zalezi
na tom, zda ji aplikaci vubec pouziva a pokud ano, tak jak reaguje na
to, ze volani selhalo. Ze by Java na FreeBSD k necemu pouzivala fdescfs
v kodu nejak nevidim.
O co teda prichazim, kdyz /proc nemam a ps a w pouzivam?
Nejak nevidim, ze by soucasne ps nebo w /proc pouzivalo.
Myslim, ze na Linuxu je /proc defaultne primountovany a bez nej by tam
asi spousta veci nefungovala, ale u FreeBSD mi nikdy neprislo, ze bych
mel /proc mountovat.
Na Linuxu je /proc zakladnim nastrojem pro predavani nekterych informaci
mezi kernelem a aplikacemi (zejmena scripty). V BSD svete ma tuhle roli
sysctl strom a odkazy na procfs pochazeji predevsim z prevzateho
Linuxoveho kodu. A toho by v zakladnim systemu uz melo byt pomalu,
respektive, zadny.
Je tam tahle funkce, ktere asi uplne nerozumim
Ne ze bych tusil co je zrep, ale ta funkce se pokousi vyrobit zamek a to
pomoci symlinku /var/run/zrep.lock smerujiciho na /proc/${OWN_PID}.
Zamek ma patrne slouzit k synchronizaci mezi hlavnim zrep procesem a z
nej pripadne spoustenymi syny.
PID hlavniho procesu, ktery znaji vsichni, pouzivaji jako jedinecny
identifikator zamku.
Jelikoz jsem v zrep uz delal nejake vlastni upravy, aby to fungovalo se
sudo, tak bych docela rad prepsal tuhle funkci tak, aby nepotrebovala
/proc, ale aby zustala zachovana funkcnost / spolehlivost toho zamku.
Ta funkce /proc vlastne az tak moc nepotrebuje. Udelat symlink na
/proc/$$ muzes aniz nejakej /proc vubec existuje. Takze staci odstranit
ten test na to, ze /proc existuje.
Zadrhel nastane jen se 'stale lock' detekci, kde oni zjistuji, zda
proces, ktery lock drzi, stale existuje (pokud ne, je lock 'stale'). A
zjistuji to testem existence /proc/$lockpid - tenhe test musis prepsat a
to, zda v systemu bezi proces s $lockpid testovat jinak, bez proc.
Treba
if ps -axo pid | tr -d ' ' | grep -q "^$lockpid\$" ; then
V historii na GitHubu jsem nasel, ze se ve starsim kodu pouzival lockf
No a nebo tak. Skoro mi pouziti lockf pripada snazsi nez se patlat s
vlastni obsluhou delani symlinku ...
ale taky ze ho kvuli nejakemu bugu odstranili
https://github.com/bolthole/zrep/commit/bae9a5fb6f2a14a1765d5675879d7171ad805c7f
Musel bys zjistit jaky meli doopravdy problem - ono to mohlo byt neco,
co na FreeBSD problemem neni a pak to proste muzes vratit do stavu v
jakem to meli pred {u|o}pravou.
Dan
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l