23,120
社区成员
发帖
与我相关
我的任务
分享
void handle2(int signo){
printf ("handlepid = %i , addr = %x\n", pid,&pid);
printf("Current time:\n");
kill(pid,SIGUSR1);
}
if(pid==0){
/*sleep(1);
*/
ppid=getppid();
printf ("childpid = %i , addr = %x\n", pid,&pid);
for(i=0;i<5;i++){
kill(ppid,SIGUSR2);
pause();
}
exit(0);
}
printf ("parentpid = %i , addr = %x\n", pid,&pid);
if(signo==SIGUSR2){
printf ("pid = %i , addr = %x\n", pid,&pid);
printf("Current time:\n");
fflush(0);
kill(pid,SIGUSR1); //如果pid为0,那么发信号给当前进程组,所以会输出两次
}
#include<stdio.h>
#include<time.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/wait.h>
pid_t cpid,ppid;
void handle1(int signo){
int i=0;
time_t now;
if(signo==SIGUSR1){
for(i=0;i<3;i++){
time(&now);
printf("%s%",ctime(&now));
sleep(1);
}
}
}
void handle2(int signo){
printf("Current time:\n");
kill(cpid,SIGUSR1);
}
int main(){
pid_t pid;
int i;
int stat;
signal(SIGCLD,SIG_IGN);
signal(SIGUSR1,handle1);
signal(SIGUSR2,handle2);
pid=fork();
if(pid<0){
perror("fork");
exit(-1);
}
else if(pid==0){
sleep(1);
/*确保cpid=pid;先运行*/
ppid=getppid();
for(i=0;i<5;i++){
kill(ppid,SIGUSR2);
pause();
}
exit(0);
}
cpid=pid;
wait(&stat);
return 0;
}