返すインタフェースなので、それに合わせるためです。子プロセスを生成します。子プロセスはこんな動きです。子プロセスを新たなプロセスグループに移します。理由はあとでkillを呼ぶときに親プロセスまで巻き添えにしないようにするためです。子プロセスの標準出力を閉じ、パイプの書き込み用ファイルディスクリプタを代わりに使います。子プロセスの出力がパイプに書き込まれます。シェルを利用して引数に指定されたコマンドを実行します。シェルを利用する理由はpopenと同じ仕様(コマンド引数を1つの文字列で渡す)にしたいからです。シェルを挟まない場合は、複数の文字列に分割して渡す必要があります。親プロセスはこんな動きです。子プロセスのプロセスグループを取得します。子プロセスのプロセスグループを強制終了します。子プロセスが終了するまで待ちます。プロセスの親子関係はこうなります。`-yes,536210もしコマンドがさらに孫、ひ孫プロセスを生成しても、プロセスグループが一緒である限りkillが効くはずです。今回紹介した実装はpopenの完全な上位互換ではありません。理由としては入力側を扱えないこと、popenのようなAPIとして使えないこと、が挙げられますが、拡張は容易だと思います。01:48)コメント一覧コメントはありません。