资源介绍
(1)进程的软中断通信
#include
#include
#include
#include
int wait_flag;
void stop();
main( ) {
int pid1, pid2; // 定义两个进程号变量
signal(2,stop); // 或者 signal (14,stop);
while((pid1 = fork( )) == -1); // 若创建子进程1不成功,则空循环
if(pid1 > 0) { // 子进程创建成功,pid1为进程号
while((pid2 = fork( )) == -1); // 创建子进程2
if(pid2 > 0) {
wait_flag = 1;
//sleep(1); // 父进程等待5秒
kill(pid1,SIGUSR1); // 杀死进程1
kill(pid2,SIGUSR2); // 杀死进程2
wait(0);
wait(0);
printf("\n Parent process is killed !!\n");
exit(0); // 父进程结束
}
else {
wait_flag = 1;
signal(SIGUSR2,stop); // 等待进程2被杀死的中断号17
printf("\n Child process 2 is killed by parent !!\n");
exit(0);
}
}
else
{
wait_flag = 1;
signal(SIGUSR1,stop); // 等待进程1被杀死的中断号16
printf("\n Child process 1 is killed by parent !!\n");
exit(0);
}
}
void stop() {
wait_flag = 0;
}
(2)进程的管道通信
#include
#include
#include
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 message!\n");
write(fd[1],OutPipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else {
wait(0); // 等待子进程1 结束
read(fd[0],InPipe,50); // 从管道中读出数据
printf("%s\n",InPipe); // 显示读出的数据
wait(0); // 等待子进程2 结束
read(fd[0],InPipe,50);
printf("%s\n",InPipe);
exit(0); // 父进程结束
}
}
}
- 上一篇: 操作系统实验_进程调度模拟算法
- 下一篇: 进程创建、终止、阻塞、调度、唤醒原语