Unix系のOSでは、 端末からログインして起動されたプロセス (プログラムの実行) は、 とくに指示されなければ 端末から (ふつうはキーボードから行単位で) 情報をうけとり、 端末に情報を出す形で動く。 このようなつかいかたを、つぎにのべるバックグラウンドジョブと区別して、 フォアグラウンドジョブ (foreground job)ということがある。 ログアウトするとフォアグラウンドジョブは終わってしまう。
プロセスを端末から切り離して実行することもできる。 こうすれば、ログアウトしてもプログラムの実行はつづく。 このようなつかいかたを、バックグラウンドジョブ (background job) という。
シェルが bash, csh のいずれでも、 コマンド行の最後に「&」をつけると、 そのコマンドの実行がバックグラウンドにまわり、 端末からは次のコマンドをいれることができる。
ログアウトしたり端末を終了したりしてもバックグラウンドジョブが とまらないようにするために、コマンドのまえに「nohup」をつける。
バックグラウンドにまわされたプロセスが端末から入力を要求するばあい、
Unix系のOS上のプログラムは、ふつう、出力ファイル名を指定しなくても、 「標準出力」と「標準エラー出力」のふたつの出力をもつ。 フォアグラウンドジョブのばあいは、いずれも端末にわりあてられているが、 「>」などの redirection 指定によって、ファイルにまわすこともできる。
バックグラウンドジョブのばあいは、 標準出力と標準エラー出力の両方をファイルにまわす (あるいは捨ててしまう) 必要がある。 ここでは、(例として) command というコマンドを実行し、 標準出力と標準エラー出力をまぜて (例として) log.txt というテキストファイルに書きだすことにしてみる。
図形出力をふくむ (matplotlib をつかう) Python プログラムを実行すると、 プロセスをバックグラウンドにまわしても、 端末に要求が出ることがある。
たとえば、Windows の TeraTerm から接続しているばあいには、 つぎのような窓がでる。
TTSSH
サーバはこのマシンに転送を試みました.
localhost 上の Xサーバーへの接続を要求しました (ディスプレイ 0:0).
接続は拒否されました (おそらくサービス停止中です) (code 10061).
転送接続を終了します.
[OK]
(1) もし plt.show をつかっているならば、 それをつかわないように (図を plt.savefig で画像ファイルにしまうように) プログラムを修正する。
(2) plt.show をつかっていなくて、上記のエラーメッセージ窓が出たならば、 窓の「OK」ボタンをクリックすると、正常にさきにすすむ。 しかし、ログアウトしてしまっていると、その機会が得られず、異常終了になるだろう。
(3) プロセスをバックグラウンドにまわしたいならば、 端末に要求が出ないようにプログラムを修正したほうがよい。 それには、プログラムの「import matplotlib.pyplot as plt」よりまえに、つぎの2行をいれると、 このエラーメッセージをださずにさきにすすむ。
import matplotlib
matplotlib.use("Agg")
この件はいくつかのウェブページを参照したが、つぎのページを例にあげておく。
雑多な記録 : python: matplotlib: cui環境 (杉本 高大 さん Last modified: 2021/06/27 22:04)
http://www2.yukawa.kyoto-u.ac.jp/~koudai.sugimoto/dokuwiki/doku.php?id=python:matplotlib:cui%E7%92%B0%E5%A2%83
matplotlib 入門 : とりあえず描く (柞刈 湯葉 さん)
https://yubais.net/doc/matplotlib/introduction.html
ps というコマンドがある。オプションなしで実行すると、 その端末で起動されたプロセスだけが 表示される。
過去に、あるいは別の端末から起動されたものもふくめて、 自分が起動したプロセスを知るにはつぎのようにする。
ps aux | grep 自分のユーザID
件数のおおいときは
ps aux | grep 自分のユーザID | less
ここで「|」は縦棒で、左側のコマンドの標準出力を 右側のコマンドの標準入力にする「パイプライン」処理を指定している。
左端の列にユーザID、2番めの列にプロセス番号、 右端の列に起動したコマンドの頭の部分が表示されるだろう。
また、top というコマンドがある。 これは、現在、その計算機の CPU 能力を多くつかっている順に プロセスを表示する。q で top コマンドからぬける。 (top 自体も CPU能力をくうので、短時間でやめたほうがよい。)
kill というコマンドがある。
kill のあとに (空白をあけて) プロセス番号をかけば、 OS は そのプロセスをとめようとする。 しかし通常はそれだけではとまらない。
プロセスを強制的にとめたいときは、kill のオプションとして (プロセス番号のまえに) 「-9」 を指定する。 まちがったプロセスをとめてしまわないように、注意してつかってほしい。