vyznam procfs a fdescfs
Petr Fischer
petr.fischer at me.com
Fri Apr 21 21:48:37 CEST 2017
Sám o sobě asi bash (java?) /proc nepotřebuje, ale /proc je zkratka obraz informaci o procesech v textovým formátu proto, že je pak možný tyto informace o procesech snadno parsovat ve skriptovacích jazycích (perl, shell atd atd). Není pak nutný "bindovat" a volat core C funkce z nějakých knihoven (krapet složitější než naparsovat krátkej textovej soubor a regexpem tam něco na jednom řádku vyhledat a vzít hodnotu).
Ovšem další nástroje se v tom /proc adresáři hrabou a čtou ho - stejně jako ta uvedená funkce...
pf
> Mam na zacatek takovy trivialni dotaz: k cemu slouzi procfs a fdescfs
> napriklad pro Bash a OpenJDK? Oboje maji v pkg-message napsano, ze se ma
> primountovat fdescfs a u OpenJDK je navic i procfs.
>
> Nikde na serverech jsem nikdy nemountoval ani procfs ani fdescfs a jak java,
> tak bash se tam pouziva.
>
> V manualu k procfs se dokonce pise:
> It is normally mounted on /proc, and is required for the complete operation
> of programs such as ps(1) and w(1).
>
> O co teda prichazim, kdyz /proc nemam a ps a w pouzivam?
>
> Co si tak z davne minulosti okolo FreeBSD 4.x pamatuju, tak prave v procfs
> bylo nekolik zavaznych bezpecnostnich chyb.
>
> 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.
>
>
> A ted ta slozitejsi otazka. Cele tohle jsem zacal resit proto, ze jsem si
> zacal pohravat se sysutils/zrep (napsano v ksh93) a ten prave vyzaduje
> /proc.
>
> https://github.com/bolthole/zrep/blob/master/zrep_vars#L261
>
> Je tam tahle funkce, ktere asi uplne nerozumim
>
> #Note: it is an ERROR to call this if you already have lock
> #It is binary, not recursive ownership.
> zrep_get_global_lock(){
> typeset retry_count=$Z_LOCK_RETRY
> typeset lockpid
>
>
> [[ -d /proc/$$ ]] || zrep_errquit "/proc fs must be functional to use zrep"
>
> ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0
>
> while (( retry_count > 0 )); do
> sleep 1
> ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0
> retry_count=$((retry_count-1))
> lockpid=`zrep_global_lock_pid`
> if ! -d /proc/$lockpid ; then
> _errprint ERROR: stale global lock file
> _errprint ERROR: shut down ALL zrep instances, then manually remove
> _errprint $Z_GLOBAL_LOCKFILE
> fi
>
> done
>
> print Failed to acquire global lock
> return 1
> }
>
>
> 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.
>
> V historii na GitHubu jsem nasel, ze se ve starsim kodu pouzival lockf
>
> https://github.com/bolthole/zrep/commit/2e1f06362a692e68e72d2fb104625f46513c8c58
>
> ale taky ze ho kvuli nejakemu bugu odstranili
>
> https://github.com/bolthole/zrep/commit/bae9a5fb6f2a14a1765d5675879d7171ad805c7f
>
> Poradi nekdo?
>
> Mirek
> --
> FreeBSD mailing list (users-l at freebsd.cz)
> http://www.freebsd.cz/listserv/listinfo/users-l
More information about the Users-l
mailing list