1. kill 信号发送
kill:内部命令,可用来向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
[root@c7-137-mariadb-bak ~]# man 7 signal
显示当前系统可用信号:
kill -l
trap -l
1)SIGHUP 无须关闭进程而让其重读配置文件 (改了配置文件,不生效,不想重启服务,让进程生效)
2)SIGINT 中止正在运行的进程;相当于Ctrl+c
3)SIGQUIT 相当于ctrl+\
9)SIGKILL 强制杀死正在运行的进程
15)SIGTERM 终止正在运行的进程,默认信号
18)SIGCONT 继续运行
19)SIGSTOP 后台休眠
指定信号的方法 :
信号的数字标识:1, 2, 9
信号完整名称:SIGHUP,sighup
信号的简写名称:HUP,hup
向进程发送信号:
按PID:
kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
范例:
kill -1 pid …
kill -n 9 pid
kill -s SIGINT pid
按名称:killall 来自于psmisc包
killall [-SIGNAL] comm…
按模式:
pkill [options] pattern
常用选项
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
#比如说:我修改httpdf服务的访问目录,但是我又不想重启服务
kill -1 8337 不仅加载了服务,而且进程的ID号也不发生变化。如果是重启的话,进程的PID号也会发生变化的
信号HUP查看
[root@centos6 ~]#grep -A 10 -w reload -m 1 /etc/init.d/httpd
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=6
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
LSB=1 killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
[root@centos6 ~]#
虽然被杀,但是改头换面复活了,变化PID为2261以后复活了,因为他的父进程是init,子进程被杀死,父进程可以救活
-9 虽然是强制杀死,但是 -15 却默认杀死
2. killall
killall的好处是无需关注进程编号
3. 利用0信号实现进程的健康性检查
[root@centos8 ~]#man kill
If signal is 0, then no actual signal is sent, but error checking is still performed.
[root@centos8 ~]#killall -0 ping
[root@centos8 ~]#echo $?
0
[root@centos8 ~]#killall -0 ping
ping: no process found
[root@centos8 ~]#echo $?
1
4. 作业管理
Linux的作业控制
前台作业:通过终端启动,且启动后一直占据终端
后台作业():可通过终端启动,但启动后即转入后台运行(释放终端)
将一个进程变成停止态
停止态的命令在pts/2
僵尸态查健康性不准确
后台执行随当前的终端关闭而关闭
让作业运行于后台
运行中的作业: Ctrl+z
尚未启动的作业: COMMAND &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系
nohup COMMAND &>/dev/null &
screen;COMMAND
tmux;COMMAND
查看当前终端所有作业:
jobs
fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业
5. 并行运行
后台 并行执行
利用后台执行,实现并行功能,即同时运行多个进程,提高效率
方法1
cat all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
f1.sh&f2.sh&f3.sh&
多组命令实现并行
[root@centos8 ~]#{ ping -c3 127.1; ping 127.2; }& { ping -c3 127.3 ;ping 127.4; }&
扫描网段并行
NET=10.0.0
for i in { 1..254};do
{
ping -c1 -W1 ${NET}.${i} &> /dev/null && echo ${NET}.${i} is up || echo ${NET}.${i} is down
}&
done
wait