回答:
ほとんどの場合、これは機能します。
前提条件:have reptyr
およびtmux
/ screen
installed; プラットフォームに応じてapt-get
またはyum
でそれらを見つけることができます。
Ctrl+ Zを使用してプロセスを一時停止します。
バックグラウンドでプロセスを再開します bg
バックグラウンドプロセスのプロセスIDを見つける jobs -l
次のようなものが表示されます。
[1]+ 11475 Stopped (signal) yourprocessname
現在の親(シェル)からジョブを否認する disown yourprocessname
開始tmux
(推奨)またはscreen
。
reptyr を使用してプロセスをtmux
/ screen
セッションに再アタッチします。
reptyr 11475
これで、マルチプレクサをデタッチ(デフォルトではCtrl+ B、Dfor tmux
、またはCtrl+ A、Dfor screen
)し、プロセスがtmux
/で続行している間にSSHを切断できますscreen
。
後でSSHで再度接続すると、マルチプレクサに接続できます(例:)tmux attach
。
sudo reptyr 1430
後も「... [-]子のttyを開けません。pid1430に接続できません:許可が拒否されました」
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
bg
、プロセスはバックグラウンドで実行されるjobs
はずRunning
ですStopped
。
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
-L
私はあなたのようなメッセージを受け取りましたOpened a new pty: /dev/pts/6
が、私の一時停止top
はtmuxに現れませんでした。ここで何が欠けていますか?
そのコマンドが使用可能な場合、disownを使用して端末からジョブをデタッチできます。
ただし、nohupで実行する方が安全です。
nohup
ですか?disowning
プロセスはどのように機能しますか?