У меня есть этот кодC++ ограничения дочернего процесса игнорировать SIGXCPU
static void sigXCPU(int pTmp){
cout<<" .... ";
}
.....
pid_t vPid=fork();
int vStat;
switch(vPid){
case -1: perror("fork");
exit(1);
case 0:
//limit on data
struct rlimit vLimD;
vLimD.rlim_cur = 100000;
vLimD.rlim_max = 1000000;
setrlimit(RLIMIT_DATA, &vLimD);
//limit on cpu time
struct rlimit vLimCPU;
vLimCPU.rlim_cur = 1;
vLimCPU.rlim_max = 1;
execl("./p1","",NULL);
if(signal(SIGXCPU,sigXCPU)==SIG_ERR);
break;
default:
while(wait(&vStat)!=vPid);
break;}
и код для p1 является
int main(){
sleep(10);
return 0;}
Почему ребенок игнорирует SIGXCPU? Код скомпилирован с GCC под FreeBSD 8.0 amd64 ,
+1. В частности, для редактирования, где вы добавили обсуждение «исправления» (в кавычках) кода, чтобы вызов «signal» был сделан до вызова 'execl'. –
@David, я также рекомендовал использовать 'sigaction' вместо' signal' для добавления обработчика в духе дальнейшего образования. –
Пила это. Не то, чтобы это помогло с этой проблемой. К xnl96: всего лишь один код, который должен иметь после вызова 'exec' - это вызов' exit', возможно, с сообщением об ошибке. Возврат из 'exec' происходит только тогда, когда что-то пошло не так с' exec'. –