現在のコマンドを取り外し可能なセッションに転送します(tmux / screen)


41

私は現在、バックアップを実行していることだし、それは今のような着脱式1に転送する必要がありますtmuxscreen。コマンドが現在実行されているときにこれを行う方法はありますか?

Ctrl+ Zを押してコマンドをバックグラウンドに送信し、コマンドを発行して元に戻すことができますfg。しかし、端末を終了するときにそのセッションに戻ることができるかどうかはわかりません。


1
それをする方法はありません。コマンドを画面(または他の)セッション内から開始して、切り離せるようにする必要があります。
ダンD.

回答:


45

ほとんどの場合、これは機能します。

前提条件:have reptyrおよびtmux/ screeninstalled; プラットフォームに応じてapt-getまたはyumでそれらを見つけることができます。

  1. Ctrl+ Zを使用してプロセスを一時停止します。

  2. バックグラウンドでプロセスを再開します bg

  3. バックグラウンドプロセスのプロセスIDを見つける jobs -l

    次のようなものが表示されます。

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. 現在の親(シェル)からジョブを否認する disown yourprocessname

  5. 開始tmux(推奨)またはscreen

  6. reptyr を使用してプロセスをtmux/ screenセッションに再アタッチします。

    reptyr 11475
    
  7. これで、マルチプレクサをデタッチ(デフォルトではCtrl+ BDfor tmux、またはCtrl+ ADfor screen)し、プロセスがtmux/で続行している間にSSHを切断できますscreen

  8. 後でSSHで再度接続すると、マルチプレクサに接続できます(例:)tmux attach


2
残念ながら、実行sudo reptyr 1430後も「... [-]子のttyを開けません。pid1430に接続できません:許可が拒否されました」
ダリルスピッツァー14

3
-Lオプションを使用すると、成功する場合があります(例:reptyr -L 1430)。
cgseller

1
必要に応じてこれを実行しますecho 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
。– Yanhao

また、yo経由でArch上にあります:archlinux.org/packages/community/i686/reptyr(apt-getまたはyumではない)
トミー

1
bg、プロセスはバックグラウンドで実行されるjobsはずRunningですStopped
G-Manが「Reinstate Monica」と言う

2

reptyr 良いですが、許可エラーが発生しました

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

それから見つけた
-L Like '-l', but also redirect the child's stdio to the slave.

それは魅力のように働いた

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
私が追加したとき、-L私はあなたのようなメッセージを受け取りましたOpened a new pty: /dev/pts/6が、私の一時停止topはtmuxに現れませんでした。ここで何が欠けていますか?
メーラッド・マフムディアン

-1

そのコマンドが使用可能な場合、disownを使用して端末からジョブをデタッチできます。

ただし、nohupで実行する方が安全です。


これを拡張できますか?それから始めてどういう意味nohupですか?disowningプロセスはどのように機能しますか?
ダースアンドロイド

disownは、端末からバックグラウンドプロセス(control-zでバックグラウンドにしたもの)を切り離し、端末がなくなった後もプロセスが続行されるようにします。コマンドが見つかった場合は、control-zの後にdisownと入力するだけです。ただし、これは理論上であり、確実に機能しない場合があります。次回は、プログラムの前にnohupを追加して、端末を安全に終了できるようにすることで、より安全になります。
johnshen64

前述のように、「disown」はかなり信頼できないことがわかりました。nohupのほうがそれほど優れているわけではありません。しかし、reptyrは解決策かもしれません。github.com/nelhage/reptyr
倒置

これは質問に答えません。問題は、「バックアップを停止せずに端末を閉じる方法」だけでなく、「後で再開する方法」です。正解は「できない」です。
ゲイブ

ここでセマンティックの不一致が発生する可能性がありますが、これは「relocatable」、「position-independent」、「detach tmux」などのキーワードの非常に人気のある検索結果です。プログラムを停止してから再開するまでのメモリマッピングが異なるため、「できない」という意味ですか?バックアッププログラムは、指定されたファイル構造によってのみバックアップするファイルを認識し、その物理メモリを将来マッピング可能にするためのファイル構造が存在します。(そうでない場合のためにバックアップします!)
ジョンP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.