前言
你在做多实例实验的时候有没有很头痛的时候,多实例启动了服务的端口和配置信息都改掉了,但是处了点小问题,自己的服务配置文件有点错误。需要杀掉进程停掉服务,但进程的名字一摸一样,除去PID不一样其他没啥区别,这叫人很头痛。在真正的生产环境下杀错服务,导致真个生产环境宕机,停止工作会给用户带来很不好的体验感。
出现这种情况应该如何办呢?
错误模拟
实验环境
主机名称 | IP | 软件 | 服务状态 |
---|---|---|---|
localhost | 192.168.1.30 | nginx_01 | 运行 |
localhost | 192.168.1.30 | nginx_02 | 运行 |
localhost | 192.168.1.30 | nginx_03 | 运行 |
实验开始
下列是在一台服务器上开启,三个nginx的多实例,想要杀掉想要的进程是不是有点难度呢?
[root@localhost html]# ps -aux | grep nginx
root 66145 0.0 0.0 39308 944 ? Ss Dec14 0:00 nginx: master process /usr/sbin/nginx
nginx 66147 0.0 0.1 41780 1824 ? S Dec14 0:00 nginx: worker process
root 74049 0.0 0.0 20572 628 ? Ss 02:42 0:00 nginx: master process nginx_01/sbin/nginx
nginx 74050 0.0 0.1 23104 1384 ? S 02:42 0:00 nginx: worker process
root 74052 0.0 0.0 20572 632 ? Ss 02:42 0:00 nginx: master process nginx_02/sbin/nginx
nginx 74053 0.0 0.1 23104 1384 ? S 02:42 0:00 nginx: worker process
root 74063 0.0 0.0 112812 980 pts/0 R+ 02:42 0:00 grep --color=auto nginx
解决方案:
第一种方法:可以查看进程后边的文件启动路径,找到文件的位置。
第二种方法:可以通过端口号判断,服务的进程
第三种方法:可以查看文件/目录的进程编号,和服务的进程相对应的kill掉。
第一种方法:
这是根据查看文件启动的路径实现的找到服务的进程。万一这后边路径显示也是一摸一样该如何是好?
第二种方法:
这样查看也可以,但是这种方法要知道你开放的端口号是多少才可以准确的找到服务所在。
第三种方法:
根据文件/目录的PID来进行查看系统服务的进程,在kill掉相应的进程。前提服务器上的装有lsof的这条命令。
第三种方法:
可以根据服务进程的启动时间,判断进程是否是你想要的那个进程。方法就是使用ps -o加上指定参数查看进程启动时间、运行时间。
下列是-o的参数
参数 | 解释 |
---|---|
pid | 进程ID号 |
tty | 终端 |
user | 用户 |
comm | 进程名称 |
command | 进程拓展名称/别名 |
lstart | 进程开始时间 |
etime | 进程运行时间 |