Linux shell(6)-控制脚本

1. 处理信号

1.1 Linux 信号

  • Linux系统和应用程序可以生成超过30个信号,下表列出了常用的信号
信号 描述
1 SIGHUP 挂起进程
2 SIGINT 终止进程
3 SIGQUIT 停止进程
9 SIGKILL 无条件终止进程
15 SIGTERM 尽可能终止进程
17 SIGTOP 无条件停止进程,但不是终止进程
18 SIGSTP 停止或暂停进程,但不终止进程
19 SIGCONT 继续运行停止的进程

1.2 生成信号

1.2.1 中断进程

  • Ctrl+C组合键会生成SIGINT信号,在超时前按下Ctrl+C组合键,就可以提前终 止sleep命令。

1.2.2 暂停命令

  • Ctrl+Z组合键会生成一个SIGTSTP信号,停止shell中运行的任何进程。

停止(stopping)进程跟终止(terminating)进程不同:停止进程会让程序继续保留在内存中,并能从上次停止的位置 继续运行。

  • 当用Ctrl+Z组合键时,shell会通知你进程已经被停止了。
$ sleep 100
^Z 
[1]+ Stopped sleep 100 
$
  • 方括号中的数字是shell分配的作业号(job number)。shell将shell中运行的每个进程称为作业

  • 可以用ps命令来查看已停止的作业。

$ sleep 100
^Z 
[1]+ Stopped sleep 100 
$ 
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 
0 S 501 2431 2430 0 80 0 - 27118 wait pts/0 00:00:00 bash 
0 T 501 2456 2431 0 80 0 - 25227 signal pts/0 00:00:00 sleep 
0 R 501 2458 2431 0 80 0 - 27034 - pts/0 00:00:00 ps 
$ 
  • 在S列中(进程状态),ps命令将已停止作业的状态为显示为T。

1.3 捕获信号

  • 如果脚本收到了trap命令中列出的信号,该信号不再 由shell处理,而是交由本地处理, 格式如下:
trap commands signals
  • 每次使用Ctrl+C组合键,脚本都会执行trap命令中指定的echo语句,而不是处理该信号并 允许shell停止该脚本。
  • 案例:
$ cat test1.sh
#!/bin/bash 
# Testing signal trapping 
# 
trap "echo ' Sorry! I have trapped Ctrl-C'" SIGINT 
# 
echo This is a test script 
# 
count=1 
while [ $count -le 10 ] 
do 
 echo "Loop #$count" 
 sleep 1 
 count=$[ $count + 1 ] 
done 
# 
echo "This is the end of the test script" 

===========================================
$ ./test1.sh
This is a test script 
Loop #1 
Loop #2 
Loop #3 
Loop #4 
Loop #5 
^C Sorry! I have trapped Ctrl-C 
Loop #6 
Loop #7 
Loop #8 
^C Sorry! I have trapped Ctrl-C 
Loop #9 
Loop #10 
This is the end of the test sc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值