我這段代碼執行正確的狀態:wait4和waitpid函數沒有返回
void update_process(PROCSP * process){
int state;
printf("process.pid = %d\n", process->pid);
if (process->state== TERM || process->state == SIG)
return;
process->prio = getpriority(PRIO_PROCESS, process->pid);
errno = 0;
if (wait4(process->pid, &state, WNOHANG | WUNTRACED, &(process->r)) != -1){
if (WIFEXITED(state))
process->state= TERM;
else if(WIFSIGNALED(state))
process->state= SIG;
else if(WIFSTOPPED(state))
process->state= STOP;
else process->state= ACT;
} else{
perror("wait4");
return;
}
}
奇怪的是,當我調用該函數後,打印狀態的價值wait4它不會改變,所以函數給了我錯誤的狀態。 我確定這個過程存在,並且它有正確的pid(至少當我在Linux中執行「ps all」時,它顯示的是與傳遞給函數的pid相同的pid)。
所有這些代碼是叉子和execv(包含在功能CMD_execute)後執行:
void CMD_background(char * argv[]){
if(argv[0]==NULL){
return;
}
pid_t pid = fork();
if (pid == 0){
CMD_execute(argv);
return;
} else {
background_add_proc(argv, pid);
}
}
我也改變了wait4到waitpid函數,但同樣的事情發生。
可能是什麼問題?
謝謝!
就是這樣。謝謝! :) – Ankoku 2012-03-23 10:53:17