xargsの-Pオプション

 xargsで-Pオプションを使うと、プロセスが複数立ち上がると言うことで試してみる。コマンド実行前後をdateコマンドで挟んで、1〜10までの数を引数で渡してsleepする。

/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 20 sleep && date
201375日 金曜日 011815秒 JST
201375日 金曜日 011825秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 10 sleep && date
201375日 金曜日 011839秒 JST
201375日 金曜日 011849秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 5 sleep && date
201375日 金曜日 011855秒 JST
201375日 金曜日 011910秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 2 sleep && date
201375日 金曜日 011916秒 JST
201375日 金曜日 011946秒 JST
/Users/junya% date && echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 1 -P 1 sleep && date
201375日 金曜日 011951秒 JST
201375日 金曜日 012046秒 JST

 一番sleep時間が長くなるのがsleep 10を実行したときなので、キッチリ10秒掛かっている。同時実行するプロセスを減らすと、それに伴って処理時間が長くなる。
 -P 0を指定すると可能な限りプロセスを立ち上げるらしいが、Macで試したら「xargs: max. processes must be >0」というエラーメッセージが表示された。Linuxだと平気だった。