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服务的访问目录,但是我又不想重启服务

#yyds干货盘点#进程管理信号和前后台执行_重启

#yyds干货盘点#进程管理信号和前后台执行_centos_02

#yyds干货盘点#进程管理信号和前后台执行_配置文件_03

kill -1 8337 不仅加载了服务,而且进程的ID号也不发生变化。如果是重启的话,进程的PID号也会发生变化的

#yyds干货盘点#进程管理信号和前后台执行_centos_04

#yyds干货盘点#进程管理信号和前后台执行_重启_05

信号HUP查看

#许多服务的支持的reload操作,实际就是发送了HUP信号
#service httpd reload 即相当于 killall -1 httpd
[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
# Force LSB behaviour from killproc
LSB=1 killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
[root@centos6 ~]#


#yyds干货盘点#进程管理信号和前后台执行_重启_06

#yyds干货盘点#进程管理信号和前后台执行_重启_07

#yyds干货盘点#进程管理信号和前后台执行_配置文件_08

#yyds干货盘点#进程管理信号和前后台执行_centos_09

#yyds干货盘点#进程管理信号和前后台执行_重启_10

#yyds干货盘点#进程管理信号和前后台执行_配置文件_11

#yyds干货盘点#进程管理信号和前后台执行_配置文件_12


#yyds干货盘点#进程管理信号和前后台执行_配置文件_13

#yyds干货盘点#进程管理信号和前后台执行_重启_14

虽然被杀,但是改头换面复活了,变化PID为2261以后复活了,因为他的父进程是init,子进程被杀死,父进程可以救活

#yyds干货盘点#进程管理信号和前后台执行_重启_15

#yyds干货盘点#进程管理信号和前后台执行_配置文件_16

#yyds干货盘点#进程管理信号和前后台执行_配置文件_17

-9 虽然是强制杀死,但是 -15 却默认杀死

2. killall

#yyds干货盘点#进程管理信号和前后台执行_重启_18

#yyds干货盘点#进程管理信号和前后台执行_重启_19

killall的好处是无需关注进程编号

#yyds干货盘点#进程管理信号和前后台执行_centos_20

3. 利用0信号实现进程的健康性检查 

#yyds干货盘点#进程管理信号和前后台执行_重启_21

#yyds干货盘点#进程管理信号和前后台执行_centos_22

[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的作业控制

 前台作业:通过终端启动,且启动后一直占据终端

 后台作业():可通过终端启动,但启动后即转入后台运行(释放终端)

将一个进程变成停止态#yyds干货盘点#进程管理信号和前后台执行_centos_23

#yyds干货盘点#进程管理信号和前后台执行_重启_24

#yyds干货盘点#进程管理信号和前后台执行_配置文件_25


#yyds干货盘点#进程管理信号和前后台执行_配置文件_26

停止态的命令在pts/2

#yyds干货盘点#进程管理信号和前后台执行_配置文件_27

#yyds干货盘点#进程管理信号和前后台执行_配置文件_28

#yyds干货盘点#进程管理信号和前后台执行_centos_29

#yyds干货盘点#进程管理信号和前后台执行_重启_30

#yyds干货盘点#进程管理信号和前后台执行_配置文件_31

#yyds干货盘点#进程管理信号和前后台执行_centos_32

僵尸态查健康性不准确

#yyds干货盘点#进程管理信号和前后台执行_重启_33

#yyds干货盘点#进程管理信号和前后台执行_centos_34

#yyds干货盘点#进程管理信号和前后台执行_centos_35

#yyds干货盘点#进程管理信号和前后台执行_重启_36


#yyds干货盘点#进程管理信号和前后台执行_centos_37

#yyds干货盘点#进程管理信号和前后台执行_配置文件_38

#yyds干货盘点#进程管理信号和前后台执行_centos_39

#yyds干货盘点#进程管理信号和前后台执行_重启_40

#yyds干货盘点#进程管理信号和前后台执行_重启_41

后台执行随当前的终端关闭而关闭


#yyds干货盘点#进程管理信号和前后台执行_centos_42

让作业运行于后台

 运行中的作业: Ctrl+z

 尚未启动的作业: COMMAND &

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

nohup COMMAND &>/dev/null &

screen;COMMAND

tmux;COMMAND

查看当前终端所有作业:

jobs

fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业

5. 并行运行

后台 并行执行

#yyds干货盘点#进程管理信号和前后台执行_配置文件_43

#yyds干货盘点#进程管理信号和前后台执行_配置文件_44

利用后台执行,实现并行功能,即同时运行多个进程,提高效率

#yyds干货盘点#进程管理信号和前后台执行_配置文件_45

#yyds干货盘点#进程管理信号和前后台执行_配置文件_46


方法1

cat all.sh
f1.sh&
f2.sh&
f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&)

方法3

f1.sh&f2.sh&f3.sh&

多组命令实现并行

#yyds干货盘点#进程管理信号和前后台执行_重启_47


[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