パイプの方向は子→親

会社で使ってるgrepに-rオプションがなくて毎回「find . -type f | xargs grep WORD /dev/null」としていたのだけれど,めんどくさくなったのでgrepのラッパを書くことにした。ラッパの内容は親プロセスと子プロセスをパイプで繋いだ後にfindとxargsをexecvするだけなのだけれど,findを親プロセス・子プロセスのどちらで実行すべきか若干迷ったのです。
あんまりforkを使わないので間違っているのかもしれないけれど,今日考えた限りでは子プロセスでfindを使うべきかなーっと思った。理由は,findよりもxargsの方が後に終了するから。今回の場合,たいていはfindがxargsよりも先に終了する。シェルは親プロセスの終了を待っているので,親プロセスがfindを実行するとxargsの終了を待たずにシェルへ制御を返すことになるため,xargsの表示結果が乱れる場合がある。親プロセスがxargsを実行する場合,このようなことは起こらない。
正しくはwaitとかwaitpidとか使うのだと思うんだけど,シグナルのことを考え出すと正しいコードを書くことができないんよなー。子プロセスがサスペンドされたときの作法とかどうすればいいんだ……