時間がかかるLinuxプロセスをバックグラウンド実行したい。
そんなときはこれ。


  • プロセスをバックグラウンドで実行してみる。
コマンド入力の後にアンパサンド”&”を入れて実行すると、プロセスIDを表示しプロンプトが復帰します。これでPID=29956のプロセスがバックグラウンド実行中となった訳です。
$ sleep 10 &
[1] 29956

$
しかし、10秒待っても何も起こらないので適当にリターンキーを押すと、いきなり完了メッセージが出ます。ちょっと使いにくい。
[1]+  Done                  sleep 10
  • 普通は10秒経ったら教えて欲しいと思う
ので、バックグラウンド実行が始まったらwaitと入力して待ちます。すると10秒後にdoneと完了メッセージが表示されます。
$ (sleep 10; echo done) &
[1] 15522
$ wait
done

[1]+  Done                    ( sleep 10; echo done )
  • 次に、処理を3つ並列に実行します。
$ (sleep 10; echo done) &
[1] 27452
$ (sleep 10; echo done) &
[2] 27560
$ (sleep 10; echo done) &
[3] 27641
jobsと打つと、3つとも実行中。
$ jobs
[1]   Running                 ( sleep 5; echo done ) &
[2]-  Running                 ( sleep 5; echo done ) &
[3]+  Running                 ( sleep 5; echo done ) &
+:カレントジョブ
-:1つ前のジョブ
無印:2つ以上前のジョブ

waitと入力しとおくと、doneと完了メッセージが続けて表示されます。
$ wait
done
[1]   Done                    ( sleep 10; echo done )
done
[2]-  Done                    ( sleep 10; echo done )
done
[3]+  Done                    ( sleep 10; echo done )

スポンサードリンク