C'è un modo, a parte il riavvio, di forzare launchd
a rileggere le variabili d'ambiente recentemente definite in /etc/launchd.conf
?
Può essere fatto con launchctl(1)
?
Non c'è modo di farlo, "launchd" è il processo principale, l'equivalente di "init" in altri sistemi unix, l'unico modo in ogni altro daemon sarebbe di eseguire una sorta di kill -HUP per ricaricare la configurazione file ecc, ma questa operazione non è consentita su launchd. Se lo si osserva nella tabella dei processi, è il processo numero 1, ogni altro processo attualmente in esecuzione è in qualche modo un figlio di esso, quindi un riavvio è l'unico modo per ottenere ciò. Potresti avere maggiore fortuna nell'impostare tali variabili d'ambiente in un'altra area che è più incline a consentire i riavvii.
Dans-iMac:etc stuffe$ ps -ef | grep launchd | grep -v grep
0 1 0 0 9:40am ?? 0:09.47 /sbin/launchd
65 18 1 0 9:40am ?? 1:53.64 /usr/sbin/mDNSResponder -launchd
213 73 1 0 9:41am ?? 0:02.55 /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd
0 85 1 0 9:41am ?? 0:00.08 /System/Library/CoreServices/ODSAgent.app/Contents/MacOS/ODSAgent -launchd
89 230 1 0 9:41am ?? 0:00.01 /sbin/launchd
501 238 1 0 9:41am ?? 0:00.23 /sbin/launchd
501 933 238 0 10:53am ?? 0:00.01 /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent -launchd -allowquit
EDIT:
Ovviamente, manca la soluzione ovvia che è possibile aggiungere le variabili rilevanti nel file di configurazione e quindi eseguire i comandi manualmente per evitare la necessità di un riavvio, niente che solo i nuovi programmi di avvio terranno conto di qualsiasi i cambiamenti. Ho trovato questa pagina che la spiega in modo più dettagliato:
Environment variables set in launchd will be available to all programs on the system. However since $HOME/.launchd.conf is not supported, this approach is used for global environment variables only.
Il file /etc/launchd.conf contiene un elenco di comandi da eseguire launchctl durante l'avvio. Tuttavia, le variabili d'ambiente sono impostate in /etc/launchd.conf non può avere spazi e non può fare riferimento ad altri variabili ambientali; launchctl quando viene eseguito in Terminal non ne risente queste limitazioni. Si noti che /etc/launchd.conf non esiste di default, quindi dovremo crearlo.
Un riavvio è necessario per caricare il contenuto di /etc/launchd.conf. Tuttavia se dovessi eseguire i corrispondenti launchctlcommands in Terminale, è possibile alleviare la necessità del riavvio. Ricorda che se si eseguono solo i comandi launchctl e non si inseriscono le voci in /etc/launchd.conf, non persisterà dopo il riavvio.
Se si desidera avere una variabile d'ambiente estesa al sistema che utilizza spazi o dipendere da un'altra variabile d'ambiente, puoi mettere i comandi launchctl in uno dei file letti da Terminal. Desideri chiudere e riavviare Terminal per accedere alle nuove variabili impostate.
Sì, puoi usare launchctl per aggiungerli per te.
ad esempio dal terminale:
grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
output sulla mia macchina:
launchctl setenv _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
launchctl setenv JMETER_HOME /Applications/apache-jmeter-2.10
lauchctl setenv GRADLE_HOME /usr/local/gradle-2.0
Quindi puoi riavviare qualsiasi app che ne ha bisogno sotto i riflettori
Leggi altre domande sui tag launchd