Linux下进程管理实验:进程的软中断实验和进程的管道通信实验

相关函数

  • 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);
}
}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章