10-3 信号
三、信号
kill 命令通常用来“ 杀死 ”(终止)进程,它可以用来终止运行不正常的程序 或 拒绝终止的程序。如下例:
kill命令示例.png
我们首先在后台启动了 xlogo 程序。Shell 将打印输出该后台进程的 jobspec 选项 信息和 PID 信息。 接着,我们使用了 kill 命令,并且指定想要终止进程的 PID 。我们也可以使用 jobspec 选项(例如:%1)代替 PID 信息来指定该进程。
0.信号是什么?
这些看起来都非常简单,但是事实上它们包含着更多的内容。kill 命令准确地说并不是杀死进程,而是给进程发送信号。 信号是操作系统和程序间通信的多种方式之一,在使用 Ctrl-C 键 和 Ctrl-Z 键 时已经见识过信号的作用。 当终端接收到其中的一个输入时,它将发送信号到前台进程。 在按下Ctrl-C 键 的情况下,它将发送一个称为 INT(中断,Interrupt)的信号; 在按下Ctrl-Z 键 的情况下,它将发送一个称为 TSTP(终端暂停,Terminal Stop)的信号。 反过来,程序侦听 信号,而且在接收到信号的时候按照它们的指示进行操作。程序可以监听信号并且可以按照信号指示操作的这一特性,使得程序在接收到终止信号的时候可以保存当前正在进行的工作。
1.使用 kill 命令发送信号到进程
(1)语法格式
kill [-signal] PID...
'''
功能: 终止进程。
参数:
① PID: 要终止的进程ID号,可以写多个,就可终止多个进程。
选项:
① -signal: 指定发送的信号。signal就是信号(可以写信号编号也可写信号名;
若没有指定信号,那么默认发送TERM终止信号。常见信号见下表)。
② -p:模拟发送信号。
③ -l:指定信号的名称列表。
返回值:
'''
① 常用信号及示例
信号编号 |
信号名 |
含义 |
---|---|---|
1 |
HUP |
挂起信号。 |
2 |
INT |
中断信号。执行效果和在终端按下 Ctrl-C 键的效果一样。通常用来终止一个程序。 |
9 |
KILL |
杀死信号。 |
15 |
TERM |
终止信号。这是 kill 命令默认发送的信号类型。如果程序仍然有足够的“活力”来接受信号,那么它将被终止。 |
18 |
CONT |
继续运行信号。恢复之前接受了 STOP 信号的进程。 |
19 |
STOP |
暂停信号。该信号将使进程暂停,而不是终止。和 KILL 信号 类似,该信号不会被发送给目标进程,因此它不能被忽略。 |
Ⅰ.通过信号编号使用信号 HUP
xlogo &
# 运行 xlogo 程序,使其在后台运行。
kill -1 13456
# 使用kill命令给它发送 HUP 信号,也可写成kill -HUP 13456。
kill命令通过信号编号使用HUP.png
在此例中,首先在后台启动了 xlogo 程序; 接着,使用 kill 命令给此进程发送 HUP 信号。 xlogo 程序将终止,shell的输出信息表明这个后台进程已经接收了一个挂起信号。 你也许需要多敲几次 Enter 键才能看到这条输出信息。
Ⅱ.通过信号名使用信号(包含SIG前缀)
可通过信号编号 或 信号名 来指定信号,其中包含带有 SIG 前缀的信号名。
xlogo &
# 通过使用 & 是xlogo程序在后台运行。
kill -INT 13601
========================
xlogo &
kill -SIGINT 13608
kill命令通过信号名使用信号(包含SIG前缀).png
② 其它常用信号
信号编号 |
信号名 |
含义 |
---|---|---|
3 |
QUIT |
退出信号。 |
11 |
SEGV |
段错误信号。 |
20 |
TSTP |
终端暂停信号。 |
28 |
WINCH |
窗口改变信号。 |
③ 查看更多信号
如果想要查看更多的信号,使用以下命令将显示完整的信号列表。
kill -l
kill命令-l.png
⑥ 注意
和文件一样,进程也有所有者,只有进程的所有者(或超级用户)才能使用 kill 命令来给它发送信号。
2.使用 killall 命令发送信号给多个进程
通过使用 killall 命令,可以给 指定程序 或 指定用户名 的多个进程发送信号。
(1)语法格式
killall [-u user] [-signal] name...
'''
功能: 给 指定程序 或 指定用户名 的多个进程发送信号。
参数:
① name
选项:
返回值:
'''
① 示例
可先启动两个 xlogo 程序,然后终止它们。
xlogo &
xlogo &
killall xlogo
killall命令终止2个xlogo.png
② 注意
记住,和 kill 命令一样,必须具有超级用户权限,才能够使用 killall 命令给不属于自己的进程发送信号。
四、更多与进程相关的命令
因为进程监控是一项重要的系统管理任务,所以存在很多命令为它服务。
命令 |
描述 |
---|---|
pstree |
以树状模式输出进程列表,该模式下显示了进程间的 父/子关系。 |
vmstat |
输出系统资源使用情况的快照,包括内存、交换空间和磁盘I/O。如果想要持续查看输出,可以在命令后面加上一个间隔时间(以秒为单位),命令将按间隔时间来动态更新显示内容(例:vmstat 9)。按下 Ctrl-C 终止输出。 |
xload |
用来绘制 显示系统时间负载情况 图形的一种图形化界面程序。 |
tload |
类似于 xload 程序,但是图形是在终端上绘制。按下 Ctrl-C 终止输出。 |
- 程序员的进化
- 浅谈JavaScript的事件(事件委托)
- 浅谈JavaScript的Canvas(绘制图形)
- 浅谈JavaScript的事件(事件流)
- 浅谈JavaScript的函数表达式(递归)
- 浅谈JavaScript的事件(事件模拟)
- Spring中@Transactional事务回滚实例及源码
- 浅谈JavaScript的函数表达式(闭包)
- 浅谈JavaScript的事件(事件类型)
- 17年编程生涯的三大经验总结
- 浅谈JavaScript的面向对象程序设计(四)
- 浅谈JavaScript的事件(事件对象)
- 浅谈JavaScript的字符串的replace方法
- 西方红玫瑰和辣条先生黑产组织深度分析报告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中把用户添加到组的4个方法总结
- Linux下配置jdk环境的方法
- Ubuntu 16.04/18.04 安装Pycharm及Ipython的教程
- linux系统对外开放3306、8080等端口,防火墙设置详解
- Linux中selinux基础配置教程详解
- Linux中如何查看已挂载的文件系统类型详解
- 在 Linux 命令行中使用 tcpdump 抓包的一些功能
- CentOS平台快速搭建LAMP环境的方法
- Linux系统中时间的获取和使用
- 基于Linux搭建Apache网站服务配置详解
- CentOs下手动升级node版本的方法
- 详述Linux中Firewalld高级配置的使用
- CentOS7安装PHP7 Redis扩展的方法步骤
- centos7下rsync+crontab定期同步备份
- 你可能不知道的一些linux文件权限管理方法