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'出錯的情況下發生。 –