У меня есть простая c-программа, которая выполняет 'ps' и передает ее в 'grep', в основном 'ps | grep x '.ps команда linux vs unix различное поведение в c-программе
код идет более или менее что-то вроде этого:
#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» без проблем на любой операционной системе. Что отличает «ps»?
EDIT:
добавлены библиотеки, включенные в код.
Попробуйте прочитать о 'SIGCHLD'. – icktoofay
спасибо, это было действительно полезно. Я был сигналом 17, но не получал никакой полезной информации. уже поздно, я проведу некоторое время, исследуя это завтра. – Lex