* Thilo schrieb am 20.Sep.2001:
On Thu, 20 Sep 2001, Helga Fischer wrote:
deine umgebung aendert sich ja dauernd, deshalb sieht man manchmal mehr oder auch weniger - ja programme setzen auch umgebungsvariablen (z.b. der xserver die DISPLAY variable) alle programme uebernehmen (meistens) die umgebung von dem programm das sie aufruft (ab und zu sehr gefaehrlich, stichwort: root)
Alle Programme übernehmen *immer* die gesammte Umgebeung. Das heißt alle Umgebungsvariablen. Das Programm kann sie natürlich später verändern, aber erst mal übernimmt es sie vom Elterprzeß. Ein Prozeß kann nicht die Umgebung anderer Prozesse verändern, sondern nur die eigene, die seine Kinder aber erben. Wenn z.B ein Prozeß eine Umgebungsvariable setzt, und dann ein fork macht, daß heißt eine identische Kopie seiner selbst, die einzige Möglichkeit ein Kindprozeß zu erzeugen, dann übernimmt dieser Kindprozeß diese, wie alle anderen Umgebungsvariablen vom Elterprozeß. Ändert der Elterprozeß später die Umgebungsvariable, so spührt das Kind nichts davon. Umgekehrt spürt der Elterprozeß auch nichts, wenn der Kindprozeß was an der Variablen ändert, oder eine neue anlegt. Bei der shell ist es so, daß eine normale shellvariable durch einen export zur Umgebungsvariablen wird. Das hat zur Folge, daß eine exportieret Variable vom Kind geerbt wird. Eine Variable die nicht exportiert wird, wird nicht vererbt. Das liegt aber daran, daß die shell im Gegensatz zu perl kein fork kennt. Ruft ein shellskript ein anderes auf, so wird die shell neu gestartet. Die Umgebung bleibt erhalten, nicht aber die normalen Variablen. Intern allerdings wird schon ein fork aufgerufen, der Kindprozeß ruft anschließend aber ein execve auf, der den gesamten Programmcode und auch Datencode des Prozesses überschreibt, außer die Daten, die sich im Kernel selber befinden, wie etwa die PID. Da gehören auch die Umgebungsvariablen dazu. Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/produkte/buecher/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/shar/doc/sdb/de/html/literatur.html |Zufallssignatur 5