私はかなり奇妙な状況に直面しています:
2番目のssh接続を使用すると、起動されたプロセスが切断時に強制終了されることがわかります。
シェルが終了したときにバックグラウンドジョブが強制終了されるか、強制終了されるかを正確に決定するものは何ですか? のような投稿を見ましたが、それでもこの動作を理解できません。これは明らかに方法ではありませんscreen
およびその他の所有されていないプロセスが機能するはずです。
$ shopt huponexit
huponexit off
プロセスを永続化するためにcronコマンドを使用することに頼らなければなりませんでした
切断時に切り離されたプロセスが強制終了されるのはなぜですか?
他に探すべきものがありますか?
奇妙なNohupが機能しないようですが、次のように簡単にテストできます。
{ sleep 999; echo $? > exitcode ; } &
fuser -1 -k /bin/sleep
expr $(cat exitcode) - 128
これにより、戻りコードから128を引いた値が出力されます。これは、それを強制終了したシグナルの番号です。次の手順を実行するだけで、それらを一覧表示できます。
kill -l
代わりにこれを試してください:
rm exitcode
{ Nohup sleep 999; echo $? > exitcode; } &
fuser -1 -k /bin/sleep
ls -l exitcode
Nohupが機能する場合、この時点でそのようなファイルはないと通知されます。次の手順でこれを再確認できます。
fuser -15 -k /bin/sleep
expr $(cat exitcode) -128
この値が15であることがわかります。
編集
最後のコメントは非常に明白でした。つまり、SIGHUPはプロセス(この場合はスリープ)に送信されるのではなく、シェルに直接送信されます。もちろん、これはDropberarによって簡単に行うことができます。少しの調査によると、Dropbearは実際にログオフ時にすべてのユーザープロセスを強制終了します。
行を追加することで、この厄介な機能を変えることができます
KillMode=process
/lib/systemd/[email protected]ファイルのServiceスタンザの最後にあります。次に、Dropbearを再起動または再起動します。