Bashからzshに切り替えました。
Bashでは、シェルが終了してもバックグラウンドタスクが実行され続けます。たとえば、dolphin
はexit
の後に実行を続けます:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
これがデフォルトの動作として欲しいものです。
対照的に、zshの動作は、exit
でのジョブの実行について警告し、exit
を再度実行するとジョブを閉じます。たとえば、2番目のdolphin
-コマンドが実際にシェルを終了すると、exit
は閉じられます。
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
ここで、bashのようにzshのデフォルトの動作を作成するにはどうすればよいですか?
HUP
... zshでは、シェルの終了時にバックグラウンドジョブを実行している場合、シェルはそれを強制終了するものと見なします。この場合、
SIGHUP
...と呼ばれる特定の信号が送信されます。シェルが終了した場合でも継続するジョブを頻繁に開始する場合は、オプションNO_HUP
とバックグラウンドジョブを設定できます。放置されます。
したがって、NO_HUP
オプションを設定するだけです。
% setopt NO_HUP
Nohup
、&
、およびdisown
は、シェルが終了したときにジョブを永続的に実行させたくないので、私にとっては有効です。
Nohup <command> & disown
ただ&
はbash
で働いていましたが、Nohup
、&
、またはdisown
は、Java runコマンドを呼び出すスクリプトのように、実行中のコマンドではシェルが終了したときにプロセスが停止します。
Nohup
は、コマンドがシェルからのNohup
およびSIGHUP
信号を無視するようにします&
プロセスをサブターミナルのバックグラウンドで実行しますdisown
の後に引数(ジョブリスト内のジョブ番号のインデックス)が続くと、シェルはSIGHUP
シグナルを子プロセスに送信しません。引数なしでdisown
を使用すると、デフォルトで最新のジョブになります。このページ でNohup
およびdisown
情報を見つけ、&
情報 this SO answer 。
通常、バックグラウンドジョブの実行を維持するためにscreen
を使用します。
1)スクリーンセッションを作成します:
screen -S myScreenName
2)スクリプト、サービス、デーモンなどを起動します
)screen-session withを終了(デタッチ)
screen -d
またはショートカットALT+A then d
数百年後-セッションを再開する(再接続する)場合:
screen -r myScreenName
スクリーンセッションがあるかどうか、その名前とステータス(アタッチまたはデタッチ)を知りたい場合:
screen -ls
このソリューションは、bash、zshなどのすべての端末インタープリターで機能します。man screen