[編集する]
簡単に。
java xxx...
マシンAでパテコールを使用してマシンBから接続しています。ただし、Bマシンにはアクセスできません。java xxx...
マシンBがシャットダウンしたときにシャットダウンできない実行中のプロセスを設定するために、マシンCからマシンAにどのように接続しますか?
[オリジナル]
私はパテを使用してサーバー(マシンA)に接続しており、そのサーバーでプロセスが実行されています。ただし、コンピュータ(コンピュータB)を再起動する必要があるため、接続とパテが失われる可能性があります。実行中のプロセスにnohupを設定していないため、このプロセスが終了する可能性があります。disown
何らかの理由でパテを使用して設定することはできません。だから私はマシンCを使ってサーバー(マシンA)へのパテ接続を開き、マシンBが再起動したときにプロセスが終了しないように実行中のプロセスを設定したいと思います。
これを行う方法はありますか?disown
私が使用できるのと同じシェルプロセスを使用しているかどうかを知っています。しかし、もはやそうではありません。
答え1
プロセスが SIGHUP 信号を無視するようにデバッガを接続できます。
gdb --pid="$pid" --batch -ex 'call signal(1,1)' -ex detach
($pid
プロセスのIDはどこにありますか?)これを拡張してstdout / stdin / stderrをリダイレクトすることもできます。ただし、プロセスを別の端末に再接続する方法について、ここで説明されている他の質問も確認できます。reptyr
このサイトを検索)。
別のオプションは、Javaプロセスを制御する医師端末を割り当てて駆動するプロセスを一時停止することです。これにより、ssh接続が終了しても死ぬことはなく、javaが端末にあまり書いていない限り影響を受けません。
これはプロセステストですsleep
。
$ pstree -sp "$(pidof sleep)"
init(1)───sshd(5701)───sshd(62826)───sleep(62842)
$ kill -s STOP 62826
sleep
これで実行中のSSHクライアントを終了します。
$ ps -fC sleep
UID PID PPID C STIME TTY TIME CMD
root 62842 62826 0 09:50 pts/8 00:00:00 sleep 100
sshd
Javaプロセスが終了したら、完全に終了できるようにプロセスを再起動する必要があります。
答え2
killコマンドに機会を与えて特定の信号を提供したいのですが、まだこれを行うのに適した信号を見つけることができませんでした。組み込みの機能ではこれを行うことができないと言いたいと思います。しかし、誰かが次のようなコードを書いています。
答え3
答え4
コマンドを実行する準備ができているため、コマンドを押すと停止状態になり、プログラムは実行されませんが、CTRL-Z
プログラムの状態は保存され、いつでも再起動できます。
コマンドを実行して、プログラムにどのジョブIDがあるかを確認できますjobs
。一旦識別すると、そうすることができます。bg %your_prog_id
プログラムをバックグラウンドで送信すると、セッションを閉じても引き続き実行されます。これで終了すると、プログラムは引き続き実行されます。