赞
踩
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
简介
当我们在构建一些更高级的脚本的时候,就会涉及到如何在linux系统上来更好的运行和控制它们,到目前为止,我们运行脚本的方式都是以实时的模式,在命令行来运行它。但是这并不是脚本唯一的运行方式,我们可以在linux系统中以更丰富的方式来运行它们,甚至在脚本遇到不可查的异常中止时候,以关闭linux终端界面的方式终止脚本。
这些能力都是基于信号的机制来实现了
信号
linux使用信号与系统上运行的进程进行通信,想要对shell的脚本控制,只需要传递相关信号给shell脚本即可。
信号 | 值 | 描述 | 信号 | 值 | 描述 |
---|---|---|---|---|---|
1 | SIGHUP | 挂起进程 | 15 | SIGTERM | 优雅的终止进程 |
2 | SIGINT | 终止进程 | 17 | SIGSTOP | 无条件停止进程,不终止进程 |
3 | SIGQUIT | 停止进程 | 18 | SIGTSTP | 停止或暂停进程,不终止进程 |
9 | SIGKILL | 无条件终止进程 | 19 | SIGCONT | 继续运行停止的进程 |
默认情况下,bash shell会忽略收到的任何SIGQUIT(3)和SIGTERM(15)信号(正因为这样交互式shell才不会被意外终止)。但是bash shell会处理收到的SIGHUP(1)和SIGINT(2)信号。
如果bash shell收到SIGHUP信号,它会退出。但在退出之前,它会将信号传给shell启动的所有进程(比如shell脚本)。通过SIGINT信号,可以中断shell,Linux内核停止将CPU的处理时间分配给shell,当这种情况发生时,shell会将SIGINT信号传给shell启动的所有进程。
生成信号
终止进程:
ctrl+c,
暂停进程:
ctrl+z,停止的进程继续保留在内存中,并能从停止的位置继续运行
恢复进程:
jobs查看运行任务,fg num 重新执行
杀死进程:
kill -9 pid
简单实践
实践1-终止进程
[root@localhost ~]# sleep 1000
^C
[root@localhost ~]#
实践2-挂起进程
[root@localhost ~]# sleep 1000
^Z
[1]+ 已停止 sleep 1000
[root@localhost ~]# ps aux | grep sleep
root 39067 0.0 0.0 108052 360 pts/0 T 17:28 0:00 sleep 1000
实践3-恢复进程
查看所有挂起进程
[root@localhost ~]# jobs
[1]+ 已停止 sleep 1000
恢复挂起进程的id
[root@localhost ~]# fg 1
sleep 1000
^C
[root@localhost ~]#
实践4-杀死进程
后台执行命令
[root@localhost ~]# sleep 1000 &
[1] 39074
[root@localhost ~]# ps aux | grep sleep | grep -v grep
root 39074 0.0 0.0 108052 360 pts/0 S 17:30 0:00 sleep 1000
强制杀死进程
[root@localhost ~]# kill -9 39074
[root@localhost ~]#
[1]+ 已杀死 sleep 1000
[root@localhost ~]# jobs
小结
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。