我需要實現一個子進程,它將執行一個文件併發送執行結果,2進程將與一個共享內存段進行通信。中斷調用函數的進程popen
我的問題是,我想殺死10秒後調用popen的子進程,但函數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調用?您也正在使用系統執行命令,因此它會在繼續之前等待,直到完成運行。 –
是的,它達到了popen調用,我添加了系統只是爲了測試,但如果試圖執行一個文件,例如睡眠(12);超過10秒,過程不會停止執行 –
,如果您用睡眠(12)替換popen,您的代碼是否按預期工作? –