目录
66. 人工输入Linux进程信号 ctrl-c ctrl-z
66. 人工输入Linux进程信号 ctrl-c ctrl-z
- Ctrl-C 生成SIGINT信号(2),中止shell中当前运行的进程。
- Ctrl-Z 生成SIGTSTP信号(18), 让程序暂停,继续保留在内存中,并能从上次停止的位置继续运行
67. 捕获信号 trap
trap命令,允许你来指定shell脚本要监看并从shell中拦截的Linux信号。trap命令的格式是:
trap commands signals
#!/bin/bash
# Testing signal trapping
trap "echo ' Block 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"
此时 Ctrl-C (SIGINT), 就不生效了。
trap也可以用来捕捉脚本退出事件,这对于 意外退出的情况是很好的监查方式
#!/bin/bash
trap "echo ' Goodbye... Exit status: $?' " EXIT
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
trap可以被修改,以及被取消。取消方法:
trap -- SIGXXX
#!/bin/bash
trap "echo ' Sorry... Ctrl-C is trapped.'" SIGINT
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
trap "echo ' I modified the trap!'" SIGINT
count=1
while [ $count -le 5 ]
do
echo "Second Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
echo "The script ID: $$"
trap -- SIGINT
echo "I just removed the trap"
count=1
while [ $count -le 5 ]
do
echo "Third Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
68. 显示脚本的 PID $$
#!/bin/bash
echo "The script ID: $$"
69. 退出终端后继续运行 nohup
nohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号(1)。简单的讲,此时就算把终端退出了,脚本也会在后台继续运行。
由于nohup命令会解除终端与进程的关联,进程也就不再同STDOUT和STDERR联系在一起。为了保存该命令产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到本地的一个名为nohup.out的文件中。
70. 重启停止的作业 bg
要以后台模式重启一个作业(SIGTSTP信号),可用bg命令加上作业号(jobs)
不加jobs号的话,bg恢复默认作业(带+号的job)。
$ ./test10.sh > test10a.out &
[1] 1950
$ ./test10.sh > test10b.out &
[2] 1952
$ ./test10.sh > test10c.out &
[3] 1955
$
$ jobs -l
[1] 1950 Running ./test10.sh > test10a.out &
[2]- 1952 Running ./test10.sh > test10b.out &
[3]+ 1955 Running ./test10.sh > test10c.out &
71. 把后台作业带到前台 fg
72. 调整谦让度 nice renice
nice命令允许你设置命令启动时的调度优先级,不过只能让命令以更低的优先级运行。
nice -n prio
$ nice -n 10 ./test4.sh > test4.out & # 调整谦让度值到10
$ nice -10 ./test4.sh > test4.out & # 调整谦让度值到10
renice命令允许你设置已经在运行的命令的调度优先级。它允许你指定运行进程的PID来改变它的优先级。
renice -n prio -p PID