常用函数
1. fork()函数
fork()函数创建一个新进程
调用格式:
#include<sys/types.h>
#include<unistd.h>
int fork();
返回值:
正确返回时,等于0表示创建子进程,从子进程返回的ID值;大于0表示从父进程返回的子进程的进程ID值。
错误返回时,等于-1表示创建失败。
2. wait()函数
wait()函数常用来控制父进程与子进程的同步。在父进程中调用wait()函数,则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出 SIGCHLD信号。当接到信后,父进程提取子进程的终止状态字,从wait()函数返回继续执行原程序。
调用格式:
# include<sys/type.h>
#include<sys/wait.h>
(pid_t) wait(int *statloc)
返回值:
正确返回时,大于0表示子进程的进程ID值;等于0表示其他。
错误返回时,等于-1表示调用失败。
3. exit()函数
exit()函数是进程结束最常调用的函数,在main()函数中调用return,最终也是调用exit()函数。这些都是进程的正常终止。在正常终止时,exit()函数返回进程结束状态。
调用格式:
include<stdio.h>
void exit(int status);
其中, status为进程结束状态。
4. kill()函数
kill()函数用于删除执行中的程序或者任务。
调用格式:
kill(int PID, int IID)
其中,PID为要被kill的进程号,IID为向将被kill的进程发送的中断号。
5. signal()函数
signal()函数是允许调用进程控制软中断信号的处理。
调用格式:
include signal. h>
int sig;
void(* func)();
signal(sig, function);
实现软中断通信程序
(1)软中断通信算法流程
(2)代码
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
int wait_flag;
void stop();
main() {
int pid1, pid2;
signal(3,stop); // or signal(14,stop);
while((pid1 = fork( )) == -1);
if(pid1> 0) {
while((pid2 = fork( )) == -1);
if(pid2> 0) {
wait_flag = 1;
sleep(5);
kill(pid1,16);
kill(pid2,17);
wait(0);
wait(0);
printf("\n Parent process is killed !!\n");
exit(0);
}
else {
wait_flag = 1;
signal(17,stop);
printf("\n Child process 2 is killed by parent !!\n");
exit(0);
}
}
else {
wait_flag = 1;
signal(16,stop);
printf("\n Child process 1 is killed by parent !!\n");
exit(0);
}
}
void stop() {
wait_flag = 0;
}