2013-10-10 34 views
45

Appena passato da bash a zsh.Uscire da zsh, ma lasciare aperti i lavori in esecuzione?

In bash, le attività in background continuano a essere eseguite quando la shell viene chiusa. Per esempio qui, dolphin continua a funzionare dopo il exit:

$ dolphin . 
^Z 
[1]+ Stopped     dolphin . 
$ bg 
[1]+ dolphin . & 
$ exit 

Questo è quello che voglio, come il comportamento predefinito.

Al contrario, il comportamento di zsh è di avvisare sull'esecuzione di lavori su exit, quindi chiuderli di nuovo se si è exit. Per esempio qui, dolphin è chiuso quando il secondo exit -command in realtà esce dalla shell:

% dolphin . 
^Z 
zsh: suspended dolphin . 
% bg 
[1] + continued dolphin . 
% exit 
zsh: you have running jobs. 
% exit 

Come faccio a fare il comportamento predefinito di zsh qui come bash?

risposta

46

Dal zsh documentation:

HUP

... In zsh, se si dispone di un processo in background in esecuzione quando le uscite di shell, la shell assumerà si desidera che per essere ucciso; in questo caso viene inviato un particolare segnale chiamato SIGHUP ... Se si avvia spesso lavori che dovrebbero proseguire anche quando la shell è stata chiusa, è possibile impostare l'opzione NO_HUP ei lavori in background verranno lasciati in pace.

Quindi, solo impostare l'opzione NO_HUP:

% setopt NO_HUP 
+9

E apparentemente aggiungere 'setopt NO_CHECK_JOBS' anche ... –

+0

Se non si desidera l'avviso, sì. –

17

Ho scoperto che utilizzando una combinazione di nohup, &, e disown lavori per me, come io non voglio provocare in modo permanente i lavori da eseguire quando la shell è uscita.

nohup <command> & disown 

Mentre solo & ha lavorato per me in bash, ho trovato quando si utilizza solo nohup, &, o disown sui comandi in esecuzione, come uno script che richiama un comando di marcia Java, il processo sarebbe ancora fermarsi quando il guscio è uscito.

  • nohup rende il comando ignorano NOHUP e SIGHUP segnali dalla shell
  • & fa girare il processo in background in un subterminale
  • disown seguito da un argomento (l'indice del numero di posti di lavoro nei processi lista) impedisce alla shell di inviare un segnale SIGHUP ai processi figli. L'utilizzo di disown senza un argomento lo porta automaticamente al lavoro più recente.

ho trovato le informazioni nohup e disown a this page, e le informazioni in &this SO answer.

69

Avviare il programma con-

dolphin &! 

Il &! (or equivalently, &|) è un collegamento specifico zsh sia sfondoedisown il processo, in modo che uscendo la shell lasciarlo girare .

+2

Questa dovrebbe essere la risposta accettata poiché risponde a una soluzione specifica per zsh. –