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调整任何进程的优先级
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句