关于linux下fork函数和signal函数的使用

今天一直在研究嵌入式的实验作业,有一组代码一直没想明白,百度搜到了许多和我相同实验的同学,但是没有一个解除了我的疑惑。在对代码中每个函数进行了仔细的研究后,终于把代码来龙去脉弄懂了。

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)	/*在父进程中*/
  
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值