私はコマンドを実行していますが、SSHセッションを閉じた後でもコマンドを実行したいと思いました。引数で始まらずにコンテキスト(-、)&
に入れました。今、接続が切断された後も続行するようにします。それが目的ですか?私はこれを試しました(私の仕事を#1としてマーク)、次に次のような結果を得ます。CTRLzbg
disown -h
disown -h
disown -h 1
jobs
disown: job not found: -h
disown
パラメータの代わりに作業仕様として「-h」を使用するのはなぜですか?zsh
それが重要な場合は、私にあります。
答え1
bash
、zsh
およびksh93
はコマンドを含むシェルですdisown
。 3つのうち、オプションをサポートbash
する唯一のものですh
。-h
これがなければ、zsh
アクションはシミュレートされ(作業テーブルから削除されます)、それを使用すると-h
アクションがシミュレートされますksh93
(終了時にSIGHUPは送信されませんが、作業テーブルから削除されず、死ぬか死ぬ可能性がありますbg
)fg
。それ)。
次のようにzshを使用してこの動作をシミュレートできます。
typeset -A nohup
trap 'disown %${(k)^nohup}' EXIT
trap 'for i (${(k)nohup}) (($+jobstate[i])) || unset "nohup[$i]"' CHLD
したがって、nohup連想配列は、終了時にSIGHUPを送信せずにジョブリストを保存します。したがって、でdisown -h %1
書くことができますnohup[1]=
。
setopt nohup
終了時にジョブにSIGHUPを送信しないも参照してください。
答え2
disown
これだけで、接続が切断された後でもプログラムが実行を続けることができます。
$ command_running_forever
^Z
zsh: suspended command_running_forever
$ bg
[1] + continued command_running_forever
$ jobs
[1] + running command_running_forever
$ disown %1
$ logout
disown -h
bashに応じて、ジョブが作業表に残り、bashが実行されたときにSIGHUPを受け取らないようにするbashパラメーターを使用してくださいhelp disown
。このパラメーターはzshには適用されません。