Linux学习之信号

trap -lkill -l都可以列出来信号所有值。
Linux学习之信号_第1张图片

trap "命令1;命令2;" 信号可以捕捉到信号之后再执行命令1命令2等命令,这里的命令可以不止两条。

快捷键产生信号

echo "This is a test" > trapTest.txtThis is a test写入到trapTest.txt,按下Ctrl+c能够引发SIGINT信号,trap "cat trapTest.txt" SIGINT在捕捉到信号之后,输出^CThis is a test^C是默认输入,一般按下Ctrl+c就会输出,This is a testcat trapTest.txt输出结果。
在这里插入图片描述
trap "echo ' interrupt';ls -a" SIGINT会在按下Ctrl+c之后先输出^C interrupt,然后再输出ls -a执行的结果。
Linux学习之信号_第2张图片

kill产生信号

killSignalInterrupt.sh先输出进程号,然后会捕捉到信号2,然后输出signal 2,而后边while语句是一个死循环,为了避免killSignalInterrupt.sh过快退出,不能捕捉到信号2

#!/bin/bash
echo $$
trap "echo signal 2" SIGINT
while :
do
   :
done

chmod u+rx killSignalInterrupt.sh给所属用户组添加上读和执行权限。
在这里插入图片描述

./killSignalInterrupt.sh &后台执行,还需要按一下回车键。
在这里插入图片描述
kill -信号 进程号可以向进程号发送信号,比如kill -2 27420
在这里插入图片描述

kill -9 27420可以把进程27420终止。
在这里插入图片描述

需要注意的是,9号信号不能阻塞,也不能捕获。
killSignalKill.sh里边的内容如下:

#!/bin/bash

echo $$
trap "echo signal 9" SIGKILL
while :
do
   :
done

Linux学习之信号_第3张图片

./killSignalKill.sh &后台运行程序,kill -9 29259发现没有输入signal 9,而是直接把29259关闭了。
Linux学习之信号_第4张图片

此文章为7月Day 31学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。

你可能感兴趣的:(Linux基础学习,linux,学习,运维)