実行中のプロセスを後からscreenに移動させる方法について紹介します.
reptyrパッケージが必要になりますのであらかじめインストールしておいてください.
$ sudo apt install reptyr
次に,何かしら時間がかかりそうなプロセスを走らせておきましょう.
$ <時間がかかるコマンド>
これで準備完了です.
では,screenに移動させてみましょう.
1 . Ctrl+Z
でプロセスを一時停止
[1]+ Stopped <時間がかかるコマンド>
2 . jobs
コマンドで該当プロセスのPIDを見つけてメモします.
$ jobs -l [1]+ 7597 <時間がかかるコマンド>
3 . ptrace_scopeのモードの変更
Ubuntuでは他のプログラムにプロセスを奪わることを避けるためにptrace_scope
によりプロセスが操作できないようになっています.
https://www.kernel.org/doc/Documentation/security/Yama.txt
今回,プロセスを別のプロセスに移動させる操作をしたいので,
そのモードを変更する必要があります.
そのためには以下のコマンドを実行します.
$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope 0
4 . screenを実行
5 . screen上でreptyr
を用いてプロセスの親を切り替え
$ reptyr 7597
ちなみに,screenに移行したいプロセスが子プロセスを走らせていたりするときは,T
オプションを追加します.
このT
オプションはターゲットの端末セッション全体を移動させるものです.
$ reptyr -T 7597
6 . fg
コマンドで停止しているプロセスをフォアグラウンドで実行
$ fg ... プロセスの出力 ...
7 . ptrace
によるロックを有効化
$ echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope 1
参考
https://datawookie.netlify.app/blog/2017/12/moving-a-running-process-to-screen/