Мне нужно реализовать дочерний процесс, который будет выполнять файл и отправить результат выполнения, процесс 2 будет связываться с сегментом разделяемой памяти.Прерывать процесс, вызывающий функцию popen
Моя проблема в том, что я хочу убить дочерний процесс, вызвав popen через 10 секунд, но функция popen игнорирует сигналы.
Вот мой код (разделяемый сегмент памяти не входит):
void kill_child(int sig)
{
kill(child_pid,SIGKILL);
printf("processus killed \n");
}
/*code....*/
signal(SIGALRM,(void (*)(int))kill_child);
if(fork()==0){
res.buffer=true;
FILE * fd;
char cmd[BUFFER_SIZE],output[BUFFER_SIZE];
strcpy(cmd,"./");
strcat(cmd,res.filepath);
system(cmd);
if((fd=popen(cmd,"r"))== NULL)
exit(1);
else
res.status=200;
strcpy(output,"");
while(fgets(buf,sizeof(buf)-1,fd))
strcat(output,buf);
if(pclose(fd))
exit(1);
strcat(res.customHTML,output);
res.buffer=true;
int err = sendResponse(res,args->client_fd);
if (err < 0) on_error("failed!\r\n");
exit(0);
}
else{
int status;
alarm(10);
waitpid(-1,&status,0);
printf("status %d _n);
}
Как сделать дочерний процесс прерываемой?
благодаря
Имеет ли ваш код когда-либо доступ к коду? Вы также выполняете команду с помощью системы, поэтому она будет ждать, пока она не закончится, прежде чем продолжить. –
Да, он достигает вызова popen, я добавил систему только для теста, но если попытаюсь выполнить файл, который имеет пример для сна (12); более 10 секунд, процесс не прекращает выполнение –
, и если вы замените popen на сон (12), ваш код работает должным образом? –