相关函数
- fork():创建一个新进程
- wait():用于阻塞,控制子进程和父进程同步
- exit():进程结束
- kill():删除执行中的程序或者任务
- signal():允许调用进程控制软中断信号的处理
- pipe():创建一个管道
进程的软中断实验
用fork创建两个子进程,在从系统调用signal让父进程捕捉键盘上的中断信号,当接收到软中断后,父进程用kill中断两个信号。
#include<stdio.h>//exit()
#include <stdlib.h>//exit()
#include<signal.h>//signal()
#include<unistd.h> //pipe()
#include<sys/types.h>//wait()
int wait_flag;
void stop();
main(){
int pid1,pid2;//定义两个进程变量
signal(3,stop);//键盘按Quit键
while((pid1=fork())==-1);//创建子进程1不成功,则空循环
if(pid1>0){
while((pid2=fork())==-1);
if(pid2>0){
wait_flag=1;
sleep(5);//父进程等待五秒
kill(pid1,16);//杀死进程1
kill(pid2,17);//杀死进程2
wait(0);//等待第一个进程结束的信号
wait(0);//等待第二个进程结束的信号
printf("\n Parent process is killed !!\n");
exit(0);
}
else{
wait_flag=1;
signal(17,stop);//等待进程2被杀死的中断号17
printf("\n Child process 2 is killed by parent !!\n");
exit(0);
}
}
else{
wait_flag=1;
signal(16,stop);//等待进程1被杀死的中断号16
printf("\n Child process 1 is killed by parent !!\n");
exit(0);
}
}
void stop(){
wait_flag=0;
}
进程的管道通信实验
使用系统调用pipe建立一条管道,父进程从管道中读出来自两个子进程的消息,显示在屏幕上。
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include <stdlib.h>
#include <stdlib.h>
int pid1,pid2;//定义两个进程变量
main(){
int fd[2];
char OutPipe[100],InPipe[100];//定义两个字符数组
pipe(fd);//创建管道
while((pid1=fork())==-1);//如果进程1创建不成功,则空循环
if(pid1==0){
lockf(fd[1],1,0);//锁定管道
sprintf(OutPipe,"\n Child process 1 is sending message !\n");
write(fd[1],OutPipe,50);//向管道写入数据
sleep(5);
lockf(fd[1],0,0);//解除管道锁定
exit(0);//结束进程1
}
else{
while((pid2=fork())==-1);//如果进程2创建不成功,则空循环
if(pid2==0){
lockf(fd[1],1,0);
sprintf(OutPipe,"\n Child process 2 is sending messagec !\n");
write(fd[1],OutPipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else{
wait(0);
read(fd[0],InPipe,50);
printf("%s\n",InPipe);
wait(0);
read(fd[0],InPipe,50);
printf("%s\n",InPipe);
exit(0);
}
}
}