GNU/Linux >> Linux の 問題 >  >> Linux

SSH からのログアウト後に、現在実行中の Linux タスクが強制終了されないようにします

タスクが既に起動されている場合は、手遅れです* ssh の間に追加のレイヤーを挿入する代替ソリューションを検討する screen のようなコマンドを実行しているセッションとシェル 、 tmuxbyobunohup

プロセスがバックグラウンドに配置されることをサポートし、特に stdout のときにハングしない場合 と stderr Control でログアウトする前にバックグラウンドに置くことができます Z および bg 次に、disown を使用してシェルから切り離します

例:

$ ssh localhost
You have new mail.
Last login: Fri Jun  6 11:26:56 2014

$ /bin/sleep 3600    


^Z[1] + Stopped                  /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] +  Running                 /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864     1  0 21:12 ?        00:00:00 /bin/sleep 3600
jlliagre 13056 12477  0 21:13 pts/18   00:00:00 grep sleep
$ 

* Bob がコメントしたように、実際には Linux で tty セッションの親を変更するハックな方法がいくつかあります。 repty、retty、injcode、neercs。最も高度なものは reptyr のようですが、ptrace がプロセスをハッキングできるようにするには root 権限が必要な場合があります。


1 つの解決策は、GNU screen を使用することです。 screen を起動できます 、コマンドを実行してから、 C-a d でデタッチします .後で再接続するには、screen -r を実行します 、前のセッションに戻りました。

screen のその他の利点は、ウィンドウ管理 (新しい SSH 接続を必要とせずに、コマンドの実行中に他のシェルに切り替えることができるため) であり、現在のセッションであろうと後のセッションであろうと、コマンドをフォアグラウンドに残すことができます。

編集: コメントに記載されているように、これは screen を開始することを忘れない場合にのみ機能します コマンドを実行する前に。コマンドが既に実行されている場合は、@jlliagre のソリューションが必要になります。


Linux
  1. LinuxでアクティブなSSH接続を見つける方法

  2. SCP Linuxコマンド–リモートからローカルへのSSHファイル転送方法

  3. Linuxはコマンドをリモートで実行します

  1. SSHセッションからログアウトした後もコマンドを実行し続ける4つの方法

  2. Python から Linux コマンドを実行する

  3. Linuxでplink.exeからsudoコマンドを実行する[windows]

  1. AndroidからLinuxでSSH接続する方法

  2. TmuxがSshで起動しないようにしますか?

  3. Linux で SSH クライアントを閉じた後にバックグラウンド プロセスが停止しないようにする方法