タスクが既に起動されている場合は、手遅れです*
ssh
の間に追加のレイヤーを挿入する代替ソリューションを検討する screen
のようなコマンドを実行しているセッションとシェル 、 tmux
、 byobu
、 nohup
プロセスがバックグラウンドに配置されることをサポートし、特に 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 のソリューションが必要になります。