122

ちょうど bash から zsh に切り替えました。

bash では、シェルが終了してもバックグラウンド タスクが実行され続けます。たとえば、次のようにdolphin実行し続けますexit

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

これは、デフォルトの動作として私が望むものです。

対照的に、zsh の動作は、で実行中のジョブについて警告しexit、再度実行した場合はそれらを閉じますexit。たとえば、次の は、2 番目の-command が実際にシェルを終了したdolphinときに閉じられます。exit

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

ここでzshのデフォルトの動作をbashのようにするにはどうすればよいですか?

4

4 に答える 4

212

次のコマンドでプログラムを開始し&!ます。

dolphin &!

&!(または同等の&|)は、シェルを終了してもプロセスが実行されたままになるように、バックグラウンド とプロセスの 放棄の両方への zsh 固有のショートカットです。

于 2015-11-16T12:55:51.637 に答える
65

zshのドキュメントから:

HUP

... zsh では、シェルの終了時にバックグラウンド ジョブが実行されている場合、シェルはそれを強制終了したいと想定します。この場合、... と呼ばれる特定のシグナルが送信されSIGHUPます。シェルが終了した後でも続行する必要があるジョブを頻繁に開始する場合は、オプションを設定するNO_HUPと、バックグラウンド ジョブはそのままになります。

したがって、NO_HUPオプションを設定するだけです:

% setopt NO_HUP
于 2013-10-10T18:04:28.400 に答える
36

シェルが終了したときにジョブを永続的に実行させたくないので、nohup&、およびの組み合わせを使用するとうまくいくことがわかりました。disown

nohup <command> & disown

&でうまくいきましたが、 、、またはjava run コマンドを呼び出すスクリプトのように実行中のコマンドbashのみを使用すると、シェルが終了するとプロセスが停止することがわかりました。nohup&disown

  • nohupコマンドを無視させ、シェルからシグナルNOHUPを送りますSIGHUP
  • &サブターミナルのバックグラウンドでプロセスを実行します
  • disown引数 (ジョブリスト内のジョブ番号のインデックス) が続くと、シェルSIGHUPが子プロセスにシグナルを送信するのを防ぎます。引数なしで使用disownすると、デフォルトで最新のジョブになります。

このページの情報と、nohupこのSO 回答disownの情報を見つけました。&

于 2015-03-25T07:48:34.387 に答える