③linux 进程管理

管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对进程发送关闭信号。当然除了kill、还有killall,pkill

1.使用kill -l列出当前系统所支持的信号

[root@rstx-53 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

虽然linux支持信号很多,但是我们仅列出我们最为常用的3个信号

数字编号 信号含义 信号翻译
1 SIGHUP 通常用来重新加载配置文件
9 SIGKILL 强制杀死进程
15 SIGTERM 终止进程,默认kill使用该信号

1.我们使用kill命令杀死指定PID的进程。

#1.给 vsftpd 进程发送信号 1,15
[root@xuliangwei ~]# yum -y install vsftpd
[root@xuliangwei ~]# systemctl start vsftpd
[root@xuliangwei ~]# ps aux|grep vsftpd

#2.发送重载信号,例如 vsftpd 的配置文件发生改变,希望重新加载
[root@xuliangwei ~]# kill -1 9160

#3.发送停止信号,当然vsftpd 服务有停止的脚本 systemctl stop vsftpd
[root@xuliangwei ~]# kill 9160

#4.发送强制停止信号,当无法停止服务时,可强制终止信号
[root@xuliangwei ~]# kill -9 9160

2.Linux系统中的killall、pkill命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall、pkill把这两个过程合二为一,是一个很好用的命令。

#例1、通过服务名称杀掉进程
[root@xuliangwei ~]# pkill nginx
[root@xuliangwei ~]# killall nginx

#例2、使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
[root@xuliangwei ~]# pkill -9 -t pts/0

管理后台进程

1.什么是后台进程
通常进程都会在终端前台运行,一旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运行,就是将在前台运行的进程放入后台运行,这样及时我们关闭了终端也不影响进程的正常运行。

2.我们为什么要将进程放入后台运行
比如:我们此前在国内服务器往国外服务器传输大文件时,由于网络的问题需要传输很久,如果在传输的过程中出现网络抖动或者不小心关闭了终端则会导致传输失败,如果能将传输的进程放入后台,是不是就能解决此类问题了。

3.使用什么工具将进程放入后台
早期的时候大家都选择使用&符号将进程放入后台,然后在使用jobs、bg、fg等方式查看进程状态,但太麻烦了。也不直观,所以我们推荐使用screen。

1.jobs、bg、fg的使用(强烈不推荐,了解即可)

[root@xuliangwei ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@xuliangwei ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000
[root@xuliangwei ~]# ps aux |grep sleep
[root@xuliangwei ~]# jobs //查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000

[root@xuliangwei ~]# bg %2 //让作业 2 在后台运行
[root@xuliangwei ~]# fg %1 //将作业 1 调回到前台
[root@xuliangwei ~]# kill %1 //kill 1,终止 PID 为 1 的进程

[root@xuliangwei ~]# (while :; do date; sleep 2; done) & //进程在后台运行,但输出依然在当前终端
[root@xuliangwei ~]# (while :; do date; sleep 2; done) &>/dev/null &

2.screen的使用(强烈推荐,生产必用)

常用 screen 参数 效果
screen -S session_name # 新建一个叫 session_name 的 session
screen -ls(或者 screen -list) # 列出当前所有的 session
screen -r session_name # 回到 session_name 这个 session
screen -d session_name # 远程 detach 某个 session
screen -d -r session_name # 结束当前 session 并回到 session_name 这个 session
#1.安装
centos安装screen
[root@oldboy ~]# yum install screen -y

ubuntu/debian
[root@oldboy ~]# apt-get install screen -y

#2.开启一个screen窗口,指定名称
[root@oldboy ~]# screen -S wget_mysql

#3.在screen窗口中执行任务即可

#4.平滑的退出screen,但不会终止screen中的任务。注意: 如果使用exit 才算真的关闭screen窗口
ctrl+a+d

#5.查看当前正在运行的screen有哪些
[root@oldboy ~]# screen -list
There is a screen on:
    22058.wget_mysql    (Detached)
1 Socket in /var/run/screen/S-root.

#6.进入正在运行的screen
[root@oldboy ~]# screen -r wget_mysql
[root@oldboy ~]# screen -r 22058
原文地址:https://www.cnblogs.com/yangtao416/p/14517730.html