作业:
作业一
pid_t pid;
void handler(int signum)
{
if(pid>0)
{
printf("i am parent process\n");
}
else if(pid==0)
{
printf("i am chlid process\n");
}
}
int main(int argc, const char *argv[])
{
pid=fork();
signal(SIGINT,handler);
while(1);
return 0;
}
作业二
void handler(int signum)
{
wait(0);
printf("回收成功\n");
}
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if(pid>0)
{
signal(SIGCHLD,handler);
}
else if(pid==0)
{
exit(0);
}
while(1);
return 0;
}
作业三
int i=0;
void handler(int signum)
{
if(signum==SIGCHLD)
{
i++;
printf("i=%d\n",i);
while(1)
{
pid_t res=waitpid(-1,0,WNOHANG);
if(res==-1)return;
}
}
}
int main(int argc, const char *argv[])
{
signal(SIGCHLD,handler);
for(int i=0;i<500;i++)
{
pid_t pid=fork();
if(pid==0)
{
exit(0);
}
}
while(1)
{
sleep(1);
}
return 0;
}
作业4
pid_t pid,bpid,Apid;
void handler1(int signum)
{
if(signum==SIGINT)
{
if(pid==0)
{
int fd=open("./hw1.txt",O_RDONLY);
read(fd,&bpid,sizeof(pid_t));
close(fd);
printf("bpid=%d\n",bpid);
kill(bpid,SIGINT);
printf("a# process dead\n");
exit(0);
}
}
}
void handler2(int signum)
{
if(signum==SIGTSTP)
{
if(pid>0)
{
wait(0);
printf("A# process dead\n");
exit(0);
}
}
}
int main(int argc, const char *argv[])
{
signal(SIGINT,handler1);
signal(SIGTSTP,handler2);
pid=fork();
if(pid>0)
{
Apid=getpid();
printf("Apid=%d\n",Apid);
int fd1=open("./hw2.txt",O_WRONLY|O_TRUNC|O_CREAT,0664);
write(fd1,&Apid,sizeof(pid_t));
close(fd1);
while(1)
{
sleep(1);
}
}
else if(pid == 0)
{
while(1)
{
sleep(1);
}
}
return 0;
}
pid_t pid,bpid,Apid;
void handler2(int signum)
{
if(signum==SIGINT)
{
if(pid==0)
{
printf("b# process dead\n");
exit(0);
}
}
if(signum==SIGCHLD)
{
if(pid>0)
{
int fd1=open("./hw2.txt",O_RDONLY);
read(fd1,&Apid,sizeof(pid_t));
printf("Apid=%d\n",Apid);
close(fd1);
kill(Apid,SIGTSTP);
wait(0);
printf("B#process dead\n");
exit(0);
}
}
}
int main(int argc, const char *argv[])
{
signal(SIGINT,handler2);
signal(SIGCHLD,handler2);
pid=fork();
if(pid==0)
{
bpid=getpid();
printf("bpid=%d\n",bpid);
int fd=open("./hw1.txt",O_WRONLY|O_TRUNC|O_CREAT,0664);
write(fd,&bpid,sizeof(pid_t));
close(fd);
}
while(1);
return 0;
}