今天一直在研究嵌入式的实验作业,有一组代码一直没想明白,百度搜到了许多和我相同实验的同学,但是没有一个解除了我的疑惑。在对代码中每个函数进行了仔细的研究后,终于把代码来龙去脉弄懂了。
SIGINT指令=Ctrl+c
最主要坑的还是fork()创建的子进程会完完全全克隆他的父进程,包括父进程当前的代码段,也就是fork()之后,父进程执行到哪一步了,子进程就从哪一步开始执行。
子进程也会复制 父进程之前的 监听函数,例如下面代码中的
signal(SIGINT,stop);
子进程也会复制这个函数,所以当你按下ctrl+c时,父进程和子进程都会调用stop函数。
以下是代码以及注释:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
int wait_mark;
void waiting(), stop();
int main(int argc, char *argv[]) {
int p1, p2;
signal(SIGINT,stop); //监听ctrl+c,如果按下了,则执行stop函数
while((p1 = fork()) == -1);//这里创建了一个子进程,子进程和父进程一样也开始监听ctrl+c
if (p1 > 0) /*在父进程中*/
{ ①
while((p2 = fork()) == -1); //再创建一个子进程,同样也监听ctrl+c
if ( p2 > 0) /*在父进程中*/