Disown は -h オプションを使用しません。

Disown は -h オプションを使用しません。

私はコマンドを実行していますが、SSHセッションを閉じた後でもコマンドを実行したいと思いました。引数で始まらずにコンテキスト(-、)&に入れました。今、接続が切断された後も続行するようにします。それが目的ですか?私はこれを試しました(私の仕事を#1としてマーク)、次に次のような結果を得ます。CTRLzbgdisown -hdisown -hdisown -h 1jobs

disown: job not found: -h

disownパラメータの代わりに作業仕様として「-h」を使用するのはなぜですか?zshそれが重要な場合は、私にあります。

答え1

bashzshおよびksh93はコマンドを含むシェルですdisown。 3つのうち、オプションをサポートbashする唯一のものですh-hこれがなければ、zshアクションはシミュレートされ(作業テーブルから削除されます)、それを使用すると-hアクションがシミュレートされますksh93(終了時にSIGHUPは送信されませんが、作業テーブルから削除されず、死ぬか死ぬ可能性がありますbgfg。それ)。

次のように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 -hbashに応じて、ジョブが作業表に残り、bashが実行されたときにSIGHUPを受け取らないようにするbashパラメーターを使用してくださいhelp disown。このパラメーターはzshには適用されません。

関連情報