前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 控制脚本-处理信号~作业控制

linux 控制脚本-处理信号~作业控制

作者头像
葫芦
发布2019-04-17 10:44:22
1.1K0
发布2019-04-17 10:44:22
举报
文章被收录于专栏:葫芦葫芦
1               SIGHUP      挂起进程
2                SIGINT      终止进程
3               SIGQUIT     停止进程
9               SIGKILL       无条件终止进程
15             SIGTERM    可能的话终止进程
17             SIGSTOP     无条件停止进程,但不是终止进程
18             SIGSTP       停止或暂停进程,但不终止进程
19              SIGCONT    继续运行停止的进程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CTRL+C    终止进程组合键 SIGINT
CTRL+Z     停止进程组合键 SIGSTP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
捕捉信号
trap 
vt.诱骗;使受限制;困住;使(水与气体等)分离
n.圈套;(对付人的)计谋;(练习射击用的)抛靶器;(捕捉动物的)夹子
vi.设陷阱;装捕捉机;设圈套
trap command signals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@aoi ~]# cat l
#!/bin/bash
trap "echo ' Sorry! I have ctrl-C'"  SIGINT SIGTERM
echo this is a test program
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 5
count=$[ $count + 1 ]
done
echo this is the end of the test program
[root@aoi ~]# sh l
this is a test program
Loop #1
Loop #2
^C Sorry! I have ctrl-C
Loop #3
^C Sorry! I have ctrl-C
Loop #4
^C Sorry! I have ctrl-C
Loop #5
^C Sorry! I have ctrl-C
Loop #6
Loop #7
Loop #8
^C Sorry! I have ctrl-C
Loop #9
^C Sorry! I have ctrl-C
Loop #10
^C Sorry! I have ctrl-C
this is the end of the test program
每次使用CTRL+C组合键,脚本都会执行trap命令中指定的echo语句,而不是忽略此信号并允许shell停止该脚本。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
捕捉脚本的退出
[root@aoi ~]# cat k
#!/bin/bash
trap " echo 'bye bye'" exit
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 3
count=$[ $count+1 ]
done
[root@aoi ~]# sh k
Loop #1
^Cbye bye

[root@aoi ~]# sh k
Loop #1
Loop #2
Loop #3
Loop #4
Loop #5
bye bye
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
移除捕捉


[root@aoi ~]# cat i
#!/bin/bash
trap "echo byebye" exit
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 2
count=$[ $count+1 ]
done
trap - EXIT
echo "I just removed the trap"
[root@aoi ~]# sh i
Loop #1
Loop #2
Loop #3
Loop #4
Loop #5
I just removed the trap

[root@aoi ~]# sh i
Loop #1
^Cbyebye
一旦信号捕捉被移除了,脚本就会忽略该信号。但是如果捕捉被移除前收到信号脚本就会在trap命令中处理它
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
要在命令行界面以后台模式运行shell脚本,只要在命令后加个&就可以,可以在命令行提示符下同时启动任意多个后台作业
[root@aoi ~]# sh i &
[1] 1568
[root@aoi ~]# Loop #1
Loop #2
Loop #3
wangzi
bash: wangzi: command not found
[root@aoi ~]# Loop #4
Loop #5
I just removed the trap
wafiofd
bash: wafiofd: command not found
[1]+  Done                    sh i
[root@aoi ~]#
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
退出终端时,捆绑在此终端的后台进程也会推出。
nohup命令运行了另一个命令来阻断所有发给该进程的SIGHUP
[root@aoi ~]# nohup sh i &
[1] 1596
[root@aoi ~]# nohup: ignoring input and appending output to `nohup.out'
cat nohup.out
Loop #1
Loop #2
Loop #3
Loop #4
Loop #5
I just removed the trap
[1]+  Done                    nohup sh i
由于nohup命令会从终端解除进程的关联,进程会丢掉到 STDOUT和STDERR的链接。为了保存命令产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到一个nohup.out的文件中。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作业控制
启动,停止,无条件终止,以及恢复作业的这些功能统称为作业控制。
[root@aoi ~]# cat ss
#!/bin/bash
echo "thi is a test program $$"
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 5
count=$[ $count+1 ]
done
echo this is the end of test program
[root@aoi ~]# sh ss
thi is a test program 1608
Loop #1
Loop #2
^Z
[1]+  Stopped                 sh ss
[root@aoi ~]#  jobs
[1]+  Stopped                 sh ss
[root@aoi ~]# sh ss > sss &
[2] 1611
[root@aoi ~]# jobs
[1]+  Stopped                 sh ss
[2]-  Running                 sh ss > sss &

$$用来显示linux分配给该脚本的PID,然后进入循环,每次迭代都休眠5秒。
jobs命令允许查看shell当前正在处理的作业。
重启停止的作业
bg 2         2是作业号 bg是以后台形式重启,此时还可以输入其他命令。
fg 2          是前台模式重启,此时命令行提示符不会出现,知道该作业完成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-20最高优先级  19最低优先级
nice命令允许在启动时调整一个命令的调度优先级。
nice -n 10 sh ss
[root@aoi ~]# nice -n 10 sh ss >ww &
[4] 1656
[root@aoi ~]# ps al
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  1294     1  20   0   4116   572 n_tty_ Ss+  tty2       0:00 /sbin/ming

4     0  1296     1  20   0   4116   572 n_tty_ Ss+  tty3       0:00 /sbin/ming

4     0  1298     1  20   0   4116   568 n_tty_ Ss+  tty4       0:00 /sbin/ming

4     0  1300     1  20   0   4116   568 n_tty_ Ss+  tty5       0:00 /sbin/ming

4     0  1308     1  20   0   4116   568 n_tty_ Ss+  tty6       0:00 /sbin/ming

4     0  1382  1292  20   0 108352  1928 n_tty_ Ss+  tty1       0:00 -bash
4     0  1402  1398  20   0 108428  1908 wait   Ss   pts/0      0:00 -bash
0     0  1416  1402  20   0 145384  1560 wait   S    pts/0      0:00 su root
4     0  1417  1416  20   0 110524  2052 wait   S    pts/0      0:00 bash
0     0  1608  1417  20   0 108176  1364 signal T    pts/0      0:00 sh ss
0     0  1610  1608  20   0 100960   592 signal T    pts/0      0:00 sleep 5
4     0  1654  1417  30  10 108176  1360 wait   SN   pts/0      0:00 sh ss
0     0  1656  1417  30  10 108176  1360 wait   SN   pts/0      0:00 sh ss
0     0  1661  1656  30  10 100960   596 hrtime SN   pts/0      0:00 sleep 5
0     0  1662  1654  30  10 100960   596 hrtime SN   pts/0      0:00 sleep 5
4     0  1663  1417  20   0 108152   964 -      R+   pts/0      0:00 ps al

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
renice 命令可以改变系统上已经运行的命令优先级。
你只能对属于你的进程执行renice命令
你只能通过renice命令降低进程的优先级
root用户可以通过renice调整任何进程的优先级
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013/12/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档