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



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