我有一個父進程創建5個子進程。那些兒童進程正在做一些事情。父母經常詢問孩子的過程是否仍然活躍,他們有一段時間來回答。如果某個進程沒有回答,則父進程通知該進程已經退出。我必須使用信號。父發送信號並等待響應
編輯
如果你想使用的信號這種方式,那麼你需要檢查你的子進程發送了信號反饋給家長;爲此,您需要使用sigaction()系統調用。
正如麥凱建議我使用了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;
}
如果你想暫停程序,那麼爲了便於攜帶,你最好使用sleep()或者nanosleep()函數而不是for()循環。 –