バックグラウンド実行中のプロセスの出力を得る【Linux】

Nov. 12, 2019, 2:20 a.m. edited Dec. 21, 2019, 5:15 a.m.

#Linux  #Bash  #Docker 

Dockerで重いプログラムを動かしてCtrl+p&Ctrl+qでデタッチして、もう一度アタッチしたときに「そのプロセスの出力見たいんだけどっ!!」となったので調べた。

How to view the output of a running process in another bash session?にあった。straceコマンド1を使って、

$ strace -p<プロセスのPID> -s9999 -e write

でいける2。例えば、

$ ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root        130    106 93 01:44 ?        00:16:20 python3 heavy_program.py

と目的のプロセスのPID(今回は130)を得る。すると、

$ strace -p130 -s9999 -e write
strace: Process 130 attached
write(2, "hogehoge", 8) = 8
write(2, "foobar", 6) = 6

といった具合に表示される。straceの終了はCtrl+cでいけた(straceがデタッチするだけでpython3 heavy_program.pyは終了しなかった)。

write(2, ..., 8) = 82はわからないけれど、8は文字数だった)

ちなみに、対象のプロセスが存在しないときは

strace: attach: ptrace(PTRACE_SEIZE, 131): No such process

といわれる。


  1. インストールされてなかったら、Ubuntuならapt install straceでインストールできる。 

  2. -s9999は文字が切れないようにするためらしい。