ファイルを実行し、実行結果を送信する子プロセスを実装する必要があります.2プロセスは共有メモリセグメントと通信します。関数popenを呼び出すプロセスを中断する
私の問題は、10秒後にpopenを呼び出す子プロセスを強制終了したいが、関数popはシグナルを無視するということです。ここで
は私のコード(共有メモリ・セグメントは含まれません)です。
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呼び出しに達する、私はテストのためだけにシステムを追加しましたが、exemple sleep(12)のために持っているファイルを実行しようとすると; 10秒以上経過すると、プロセスは実行されず、 –
となり、popenをsleep(12)に置き換えた場合、コードは期待通りに機能しますか? –