쉘에 C 코드를 작성하는 임무가 있습니다. 쉘 명령 중 하나는 "quit kill"입니다. 여기서 주 프로세스를 종료하기 전에 모든 하위 프로세스에 TERM 신호를 보내야합니다. 자식 프로세스가 5 초 동안 종료되지 않으면 죽이기 위해 KILL 신호를 보내야합니다. 이제 코드를 작성했습니다. 테스트하고 싶습니다. 어떻게 TERM 신호를 무시하는 프로세스가 있는지 잘 모릅니다. 필요한이SIGTERM의 영향을받지 않는 프로세스가 있습니까?
void nothing(int x) {
// nothing
}
상기 추가 예를 들어, 아무것도하지 않는 함수를 선언
#include <signal.h>
을 포함 추가
kill(pid,SIGTERM);
t = time(NULL);
while(1){
int state = waitpid(pid,&status,WNOHANG);
if(state<0){
perror("Error ");
exit(0);
}
if(state == 0){
if((time(NULL)-t)>5){
printf("(5 sec passed) Sending SIGKILL… Done.\n");
kill(pid,SIGKILL);
break;
}
}
else{
printf("Done.\n");
break;
}
}
'SIG_IGN'을 사용할 수 있습니다 (동일한 매뉴얼 페이지 참조). 그리고 당신은 시그널 핸들러에서'printf'를 사용할 수 없습니다. http://man7.org/linux/man-pages/man7/signal-safety.7.html – rici
나는 고치다. 감사. –
@ Raeedmndow 가장 도움이된다고 생각되면 Accepted로 표시 할 수 있습니다. –