Linuxの並列バッチ処理ができたらいいな
バックグラウンド処理に関して話題になっているらしい.
バックグラウンド処理について
$ command & # バックグラウンド処理 $ jobs # バックグラウンドで走るジョブの確認 $ disown %n # ジョブ番号nをデーモン化する $ command &| # デーモン化したバックグラウンド処理 $ nice [-n N] command args.. # コマンドのプライオリティを指定して実行(PCのカクつき防止) $ renice N PID # 指定したプロセス番号のプライオリティをNに変更 $ nohup command & # SIGHUPを受け付けない(シェルの終了後でも走る).標準出力・エラーをnohup.outにリダイレクト
などが以下に挙げられていました.
linuxでバックグラウンド処理を便利にするコマンド+おまけ - 絶品ゆどうふのタレ
色々他に知ってるtipsを挙げてみましょう.
top コマンド
topコマンドを知らない人は少ないと思いますが,
現在PC上で走っているプロセス一覧を表示してくれるコマンドです.
topにはreniceを行う機能があり,psでPIDを調べてreniceを行うより簡単です.
topのインタラクティブ画面で"u"で特定ユーザのプロセスのみを表示するようになります.
"r"でrenice,"k"でkillを行うことができます.
ionice
niceで低優先度にしているのにシェルが重いなんて時に
バックグランドプロセスのIO入出力によりシステム全体がIOビジーに陥っている場合があります.
そんな時にIOのniceとしてioniceコマンドます.
三種類のプライオリティがあり
RealTime, BestEffort,Idleがあり,
一般ユーザはBestEffortとIdleが使用できます.
BestEffortではその内部でプライオリティが0-7で指定できます.
Idleは他のRTやBEのプロセスのIOが無いときのみIOの使用権が割り当てられます.
$ ionice -c 3 -p PID # PIDのIOをIdle時のみ行うようにする $ ionice -c 2 -n N command args.. # コマンドをIOプライオリティNに指定する.
xargs
最近のCPUはマルチコアが一般的でCPUを酷使するバッチプロセスを複数動かしたいが,
同時実行はコア数に制限したい(コンテキストスイッチのコスト抑制)場合GNU版xargsが使用できます.
Pオプションで同時実行数を指定し,nオプションで引数の数を指定できます.
以下のようなファイルを用意し
1 2 3 4 5 6 7 8 9 0 5 4 3 2 1 0 9 8 7 6
xargsを実行すると
$ cat args | xargs -P 2 -n 4 ./hoge foo bar foobar #以下のコマンドが実行される ./hoge foo bar foobar 1 2 3 4 5 ./hoge foo bar foobar 6 7 8 9 0 ./hoge foo bar foobar 5 4 3 2 1 ./hoge foo bar foobar 0 9 8 7 6
上記のコマンドの場合,同時実行2プロセスで実行されます.
最終的にはxargsをniceやrenice,screen,nohupと組み合わせて実行することになります.