雑記

【Linux】xargs の command 返却値はまとめて返される[ほぼ日刊らびるご vol.645]

@rabirgo です。
xargs という Linux コマンドでハマりました。

何かの役にたつか分かりませんが勘違いしてたことを共有します。

簡単に並行プロセスを実行できる xargs

xargs は Linux で使用できるコマンドです。

Wikipedia よると「改行等で区切られた標準入力を読み込み、空白で区切られた1行の文字列へ加工し、それを引数として指定したコマンドへ渡して実行させる」です。さっぱりわかりませんね。笑

似たような処理を簡単に何度も実行するって話なんですが、通常は直列で処理するから遅いんですね。高速化するために並列処理したい。

並列で処理する手段は幾つかあるみたいで、一番簡単なのは xargs -P というオプションかなと思います。xargs -P4 なら最大4並列で処理してくれます。

各プロセスの実行結果が分からない

今回ハマったのが、並列処理ごとに実行結果を返してくれてると思い込んでしまったことです。
この処理で失敗してるはずなのに上手く実行結果が取得できないな…と悩んでしまいました。

例えば

seq 4 | xargs -P2 touch

だと 1 2 3 4 というファイルが作成されますが、それぞれのファイルが本当に作成されたか?をステータスで確認することができません。

仕様としては、どれか一つが失敗すれば 123 が返却されるようです。

xargs - コマンド (プログラム) の説明。xargs - 標準入力からコマンドラインを作成し、それを実行する。

0 成功
123 command 実行のいずれかにおいて、 1-125 の戻り値が返った。
124 command が 255 を戻り値として返した。
125 command がシグナルによって kill された。
126 command が実行できない。
127 command が見つからない。
1 他のエラーが起こった。

それぞれの command でエラーが発生した場合に処理を分岐させたい場合はシェルスクリプトにエラー処理を書いて、そのシェルスクリプトをcommand として実行必要があるんじゃないかなと思います。

さいごに

データ数の多い大規模システムだと高速化、並列化の知識が重要になります。
SIer 時代は社内システム構築が多かったからあまり高速化ってやらなかったんですよね。趣味レベル。勉強になりました。

今日の世界一周絶景日めくりカレンダー

日めくりカレンダーを紹介しています。

キャメロンハイランド

マレーシアの軽井沢と言われてるそうで、菊の産地だそうです。日本の菊はキャメロンハイランドから送られてきてるとのこと。国花である菊を輸入してるとは思わなかった。

世界の花屋は、「花と、世界を、旅しよう!」をコンセプトに、世界中の農園で出会った草花との花のある暮らしを提案する、フラワーライフスタイルブランドです。母の日、誕生日プレゼント、結婚記念日などのお祝い、大切な人への贈り物や、ご自宅に、他とは違うストーリーのあるお花を。海外直輸入の草花を、日本全国へお届け可能。

前日の記事はこちら

翌日の記事はこちら

ABOUT ME
rabirgo
うさぎ年(rabbit)おとめ座(virgo)生まれの rabirgo です。 2019年よりフリーランスとして活動しています。 よかったら Twitter フォローお願いします! Follow @rabirgo

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です