6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonプログラムをbackground processで使用する方法

Last updated at Posted at 2021-01-25

procesには2種類あり、forward processとbackground processである。
forward processは処理が終了するまで他のプログラムの実行ができない。
プログラムの実行をしつつ、他の作業も行いたい場合にはbackground processが有効である。

本記事に含まれる内容

  • background process化と終了方法
  • 実行結果をファイルに出力する方法
  • ターミナルウィンドウを閉じてもプロセスを終了させない方法

background process化と終了方法

数字を毎秒足し上げていくsum.pyを実行したいファイルとする。

sum.py
import time

x = 0
while True:
   time.sleep(1)
   x += 1
   print(x)

下記実行後、毎秒加算の結果が出力される

$ python sum.py

以下とすることで、プロセスIDが出力されbackgroundで実行され続ける

$ python sum.py &

このプロセスを終了する場合は以下の通り

$ kill -9 {プロセスID}

実行結果をファイルに出力する方法

上記のまでの方法ではterminalに実行結果が出力され続ける。
他の作業を行なっている場合にこれは煩わしいので、新規にファイルを作成し、実行結果をファイルに出力することを考える。

以下でoutという名前のファイルを作成した。

$ python sum.py > out &

作成したoutというファイルに出力があるか確認するため、outの最終行を確認する。

$ tail -f out

上記を実行しても出力はない。
また、以下を実行してもファイルは空であることが確認される。

$ cat out 

これは実行されたPythonプログラムの出力はバッファメモリに保存されるためである。つまり実行したPythonプログラムの処理が終了するまでoutには書き込みされない。

以下とすることで、逐次的にファイルに保存される。

$ python -u sum.py > out &

作成したoutというファイルに出力があることが確認できる。

$ tail -f out

ターミナルウィンドウを閉じてもプロセスを終了させない方法

上記までの方法ではファイル実行中のターミナルウィンドウを閉じると処理が停止する。以下を実行することで処理が終了されない。

$ nohup python -u add.py &

(nohupはno hung upの略)

以下を省略した理由は、nohupを使用した場合出力先を指定しなくても自動的にログファイルが生成されるからである。

> out

以下の様にプロセスを終了したい場合、
まず実行中のプロセスのうち、add.pyに関わるものをマッチングで検索する。

$ ps ax | grep add.py

取得したプロセスIDを終了する。

$ kill -9 {プロセスID}
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?