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