5 명의 하위 프로세스를 생성하는 상위 프로세스가 있습니다. 그 자식 프로세스는 뭔가하고 있습니다. 학부모는 자녀 과정에 여전히 활동 중인지와 대답 할 시간이 있는지 자주 묻습니다. 특정 프로세스가 응답하지 않으면 부모 프로세스는 하위 프로세스가 중단되었음을 알립니다. 신호를 사용해야합니다.부모가 신호를 보내고 응답을 기다리는 중
편집
당신이 부모에게 다시 신호를 보내 당신의 자식 프로세스의 어느 검사 할 필요가 다음이 방법으로 신호를 사용하려면; sigaction() 시스템 호출을 사용해야합니다.
AS 맥케이 (My Mackay)가 제안한대로 sigaction()을 사용했습니다. 그러나 나는 아이의 말똥가슴이 있고 아이가 대답하지 않을 때,이 아이가 탈락 한 것을 알리는 방법. 나는 if 문을 사용해야 만한다는 것을 알고 있지만 어떤 조건을 검사 할 것인가?
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
pid_t pid;
void chandler(int signum)
{
psignal(signum, "Signal handled \n ");
kill(pid, SIGUSR2);
}
void phandler(int signum, siginfo_t*siginfo, void *context)
{
printf("Signal received from child:%d \n", siginfo->si_pid);
}
int main(){
int i;
struct sigaction sig;
sig.sa_handler = &chandler;
struct sigaction sig1;
sig1.sa_handler = &phandler;
sig.sa_flags = SA_SIGINFO;
sig1.sa_flags = SA_SIGINFO;
printf("Parent = %d\n", getppid());
for(i = 0; i<5; i++)
{
pid = fork();
if(pid<0){
perror("Error!");
exit(1);
}
else if(pid ==0){
sleep(3);
sigaction(SIGUSR2, &sig, NULL);
kill(getppid(), SIGUSR1);
pause();
for(;;);
}
else{
sigaction(SIGUSR1, &sig1, NULL);
pause();
}
}
for(i = 0; i<100000; i++);
return 0;
}
이식성을 위해 프로그램을 일시 중지하려면 for() 루프 대신 sleep() 또는 nanosleep() 함수를 사용하는 것이 가장 이상적입니다. –