Newsgroup: it.comp.os.unix
Titolo: Condivisione variabili d'ambiente tra + processi

Buongiorno a tutti,
vorrei iniziare una piccola discussione sulle variabili di ambiente:
dunque se faccio l'export di una variabile e poi apro un'altra
tty la variabile non e'visibile perche' si tratta di processi
separati-giusto?
ma e' possibile condividere una variabile tra più processi?
--
Francesco Marchioni
Java Developer
"In a world without fences, why does one need Gates ?"
Anonymous

separati-giusto?
Se P è il padre e F1 e F2 sono processi figli, questi vedono le export di 
P.
Ovviamente se F1 o F2 modificano la variabile P non se ne accorge.
Quindi, puoi mettere la export nel tuo .profile, o .login, o .kshrc o 
altrove, ma dovrei conoscere il caso specifico...
g.

 writes:
FM> ma e' possibile condividere una variabile tra più processi?
"Condividere", no.   Ossia non e`  possibile aggiornare la variabile  da un
lato e vederla aggiornata dall'altro, e viceversa.
Se un processo  esporta una variabile ambiente, i  processi da lui generati
ne ereditano una *copia*, ma ogni copia e` poi totalmente indipendente dal-
le altre  (compresa quella del genitore), e  non c'e` modo per  cui un pro-
cesso possa influenzare direttamente l'ambiente di un altro.
Questo perche' le "variabili d'ambiente" altro  non sono se non un array di
stringhe della forma "NOME=valore", e  quindi una struttura dati privata di
ciascun processo. Nulla vieta di  avere strutture dati condivise (via shmem
& Co.), ma nessuna shell le ha mai implementate.
Saluti,
Luca Polo.
-- 
Luca...@gest.unipd.it
 --- 
http://www.gest.unipd.it/~jake
----------------------------------------------------------
One Ping to rule them all. One Ping to find them.
One Ping to bring down them all.
And in the darkness crash them.         [The Lord of the Pings]

 FM> ma e' possibile condividere una variabile tra piů processi?


ma e' possibile condividere una variabile tra più processi?
Solo se chi la definisce e la esporta e' genitore di entrambi.
E comunque, ne vedono una copia, le modifiche di uno non passano
all'ambiente dell'altro, e nemmeno al genitore.
Se no, ci sono altri metodi per comunicare tra processi, piu' naturali
per unix (named pipe, semafori, shared memory,.....)
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

valuteresti in termini di "C" questa variabile?
Fai conto che sia un parametro passato by value, ovvero un blocco di
byte in un'area di memoria impegnata in quella specifica shell, che
contiene tutto l'ambiente.
PS: non e' che ci faresti la cortesia di quotare, cioe' lasciare solo lo
stretto indispensabile del post a cui rispondi, e mettere il tuo
contributo dopo? Grazie.



	 writes:
FM> mi sembra di capire che non si può considerere la variabile di ambiente
FM> un puntatore...visto che è indipendente dal processo padre...come la
FM> valuteresti in termini di "C" questa variabile?
Il passaggio avviene di fatto per valore: ogni processo (non solo la shell)
ha poi  al suo interno  una copia privata  dell'array (char *env[])  con le
variabili d'ambiente.
L'equivalente di un passaggio per puntatore sarebbe l'uso di un'area di
memoria condivisa.
