「nohupを用いてstreamlitをバックグラウンドで動かしていたらIDが迷子になった!時の対処法」
こんにちは、すぎもちです。今回は、バックグラウンドでstreamlitアプリを動かす際にnohupコマンドを使用しているときに起きがちな問題、それは「プロセスIDがわからなくなった!どうしよう?」という状況の対処法について、備忘録として残しておきたいと思います。
問題の発生
streamlitを含む様々なアプリケーションをバックグラウンドで動かしておきたいとき、私たちはしばしばnohupコマンドを利用します。例えば、こんな感じで:
nohup streamlit run app.py &
このコマンドは、ターミナルが閉じてもstreamlitアプリが止まらないようにしてくれます。非常に便利ですが、問題が一つ。ターミナルを閉じたり、PCを再起動したりすると、「あれ、動かしていたあのアプリ、どうやって止めればいいんだっけ?」という状況に陥りがちです。
特に、streamlitのようにポートを占有して動作するアプリケーションの場合、新たにアプリを起動しようとすると「そのポートは既に使用されています」というエラーに遭遇することがあります。そんな時に、バックグラウンドで動いているアプリのプロセスID(PID)を見失ってしまっては、対処が難しいですよね。
対処法
では、バックグラウンドで動いているstreamlitのプロセスIDをどうやって見つけ出すのか。解決策は、実にシンプルです。
ターミナルで以下のコマンドを実行します。
ps ax | grep streamlit
これにより、現在実行中のstreamlitプロセスの一覧が表示されます。表示された情報の左側にある数字が、そのプロセスのIDです。
例えば、こんな出力があったとしましょう。
12345 pts/1 S 0:00 nohup streamlit run app.py
この場合、12345がプロセスIDになります。これを知った上で、以下のコマンドでプロセスを終了させることができます。
kill 12345
これで、バックグラウンドで動かしていたstreamlitアプリを無事に終了させることができます。
まとめ
nohupでstreamlitをバックグラウンドで動かしているときに、プロセスIDを見失った!という状況に陥った際は、ps ax | grep streamlitコマンドが非常に役立ちます。この備忘録が、同じような状況に直面した方の一助となれば幸いです。
皆さんの開発生活が少しでも楽になることを願っています。それでは!