2
我有这样的代码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?代码是在FreeBSD 8.0 AMD64使用GCC编译。
+1。特别是对于编辑,您添加了“固定”(用引号引起来)代码的讨论,因此在调用'execl'之前调用'signal'。 –
@David,我还建议使用'sigaction'而不是'signal'来增加一个处理程序,本着进一步教育的精神。 –
看到了。并不是说它会帮助解决这个问题。对于xnl96:调用'exec'后应该只有一个代码是对'exit'的调用,可能在前面添加了一条错误消息。从'exec'返回只会在'exec'出错的情况下发生。 –