「ps」を実行し、それを「grep」、基本的に「ps |」にパイプする単純なCプログラムがあります。grep x'.
コードは多かれ少なかれ次のようになります。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
int pipefd[2];
int pid;
pipe(pipefd);
pid=fork();
if (pid == 0){
close(pipefd[1]);
dup2(pipefd[0], 0);
close(pipefd[0]);
execlp("grep", "grep", "b", (char *) 0);
}
else{
close(pipefd[0]);
dup2(pipefd[1], 1);
close(pipefd[1]);
execlp("ps", "ps", (char *) 0);
}
exit(0);
}
私が抱えている問題は、これを unix (Solaris) で実行すると完璧に動作しますが、(Debian) で実行すると正しく実行されますが、エラー メッセージが表示されることです。
エラーメッセージ:
Signal 17 (CHLD) caught by ps (procps-ng version 3.3.3).
ps:display.c:59: please report this bug
「ls」や「grep」などの異なるコマンドを実行する同じプログラムを試しましたが、どちらの OS でも問題はありませんでした。「ps」の違いは何ですか?
編集:
含まれているライブラリをコードに追加しました。