Linux中信号Signal的学习与理解

什么是信号?

首先,我们通过一个引子去介绍信号。在Linux下编译运行代码,用shell启动一个前台进程,大家都应该有过按Ctrl-C的时候吧,按下Ctrl-C可以强行停止程序继续执行。

其实,这里我们就可以这样说:终端的驱动程序将Ctrl-C理解为一个STGINT信号,记在了该进程的PCB中(也可以说是发送了一个SIGINT信号给进程)。注意:Ctrl-C产生的信号只能发送给前台进程。一个命令后面加&可以放到后台运行,这样shell就可以不用等待进程结束而可以接受新的命令,启动新的进程。

我们写个例子来试验一下:


然后我们去运行:


代码运行之后,我们通过Ctrl-C来停止命令。

当然,我们呢也可以在命令后面加一个&来让进程在后台跑,然后再去捕捉一下:


这里可以看到在后台中有正在运行的./test命令。对了,后面的+号表示在前台运行还是在后台,有+号表示在前台运行,没有表示在后台运行。

如果我们需要删除这个在后台执行的进程,那么我们可以通过kill命令去删除。

首先看一下kill的所有信号:


我们可以通过其中的9号命令去删除掉sig。


我们可以看到这个在后台运行的进程已经被删除了。

信号的产生

上面在简单介绍信号的时候我已经讲了一种信号的产生方式了,那就是Ctrl-C,下面我仔细介绍一下几种方式吧:

①通过终端按键产生信号。

用户在终端键入某些键时引发终端产生信号,比如上面说的Ctrl-C,产生一个SIGINT信号,停止一个进程。Ctrl-\产生SIGQUIT信号,异常终止进程并且CoreDump(在上文中我有介绍)。

②调用系统函数向进程发信号。


调用kill命令发送SIGSEGV信号。
3340 test 进程的 id 。之所以要再次回车才显示 Segmentation fault , 是因为在3340 进程终止掉之前已经回到了 Shell
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值