はじめに
ConohaVPSなどで,VPSを借り,自分のPCのVSCodeなどからSSHでアクセスをすることができます.
このとき,VSCodeの端末とシェルが,インターネットを通じてVPSの端末につながることになります.
このとき,例えば
$ nohup python main.py &
のnohupコマンドを用いることで,VPSのバックグラウンドで処理を実行し,かつVSCode側の端末を閉じても処理を継続することができます.
VSCode側を閉じる前は
$ ps
psコマンドで,pythonが実行されていることが確認できます.
問題点
VSCode側の端末を閉じた後,再びVPSにつなぎ直すと
$ ps
PID TTY TIME CMD
28883 pts/0 00:00:00 bash
29006 pts/0 00:00:00 ps
上記のようにPythonの実行コマンドが消えています・・・
このとき,自分は「端末を閉じてしまったからnohupコマンドでもプロセスが落ちてしまうんだ・・・」と思っていました><
原因
VSCode側の端末を新しく開いているため,この新しい端末のシェルから発生したプロセスのみ,ps単体のコマンドでは表示されます.
そのため,閉じてしまった端末でnohup実行していたプロセスは,端末を失った状態で実行されておりpsでは表示されませんでした.
$ ps aux
と打つと,
- a 自分以外のユーザのプロセスも表示
- x 今の端末以外のプロセスも表示
- u ユーザーフォーマットで表示
とより詳細な情報が表示されます.
$ ps aux | grep python
root 652 0.0 0.0 267080 4 ? Ssl Apr16 0:00 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
root 952 0.0 0.0 424304 280 ? Ssl Apr16 0:09 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
root 28572 31.3 32.7 538180 160184 ? R 07:47 17:45 python make_plot_chart_about_fail.py
root 28989 0.0 0.1 12108 972 pts/0 R+ 08:43 0:00 grep --color=auto python
上記のように,auxの場合でpythonを実行すると,きちんとpythonコマンドがバックグラウンドで端末を失いながら,頑張っていました><
ありがとう・・・ありがとう・・・(藤岡弘)
まとめ
- ps auxのほうが情報量が多い(ほかのプロセスや詳細情報を知りたいなど,時と場合ですね)
- Linuxの知識をもっとつけよう・・・!