void sigchld_handler(int sig) { pid_t pid; int status; while((pid=waitpid(-1,&status,WNOHANG|WUNTRACED))>0){ if(!WIFSTOPPED(status)) deletejob(jobs,pid); if(WIFSTOPPED(status)){ struct job_t *job=getjobpid(jobs,pid); job->state=ST; } if(WIFSIGNALED(status)){ kill(pid,SIGINT); printf("Job [%d] (%d) terminated by signal %d\n", pid2jid(pid), pid, sig); } } return; }