linux监控进程状态命令自定义rpm包及kill命令

监控进程状态命令-ps

ps aux
a:查看所有终端进程
x:查看所有的非终端进程
u:查看每个进程的用户


USER:启动该进程的用户
PID:进程的ID号
%CPU:占用cpu的百分比
%MEM:占用内存的百分比
VSZ:虚拟内存集(进程占用虚拟内存的空间)
RSS:真实物理内存(进程占用物理内存的空间)
TTY:运行的终端
	?:内核运行的终端
	tty:机器运行的终端
	pts/0:远程连接的终端
STAT:进程的状:
        D:      #无法中断的休眠状态(通IO的进程)
        R:      #正在运行的状态
        S:      #处于休眠的状态
        T:      #暂停或被追踪的状态
        W:      #进入内存交换(从内核2.6开始无效)
        X:      #死掉的进程(少见)
        Z:      #僵尸进程
        <:      #优先级高的进程
        N:      #优先级较低的进程
        L:      #有些页被锁进内存
        s:      #父进程(在它之下有子进程开启着)
        l:      #以线程的方式运行
        |:      #多进程的
        +:      #该进程运行在前台
START:进程被触发启动的时间
TIME:进程实际使用cpu的时间
COMMAND:进程启动的命令

环境准备

IP roles
10.0.0.150 yum仓库
10.0.0.151 客户端
10.0.0.199 fpm打包机器

部署yum仓库

# 三种方式yum仓库
	- 本地(使用file://)
	- nginx(使用http://协议、https://)
	
	- vsftpd(使用ftp://协议)
## 1.安装vsftpd服务
[root@qls ~]# yum install -y vsftpd
## 2.启动vsftpd服务
[root@qls yum.repos.d]# systemctl start vsftpd
## 3.安装创建仓库的命令
[root@qls pub]# yum install -y createrepo
## 4.将ftp的站点目录创建成仓库
[root@qls pub]# createrepo /var/ftp/pub/

手写客户端yum源

# 编辑yum源文件
[root@qls yum.repos.d]# vi /etc/yum.repos.d/zls_diy.repo
[zls_repo]
name=This is zls's repo
baseurl=ftp://10.0.0.150/pub/
gpgcheck=0
enabled=1

自定义nginx的rpm包

## 源码安装nginx
# 1.下载nginx包
[root@qls ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
# 2.先开启yum缓存
[root@localhost yum.repos.d]# vim /etc/yum.conf 
keepcache=1
# 3.安装nginx的依赖
[root@localhost yum.repos.d]# yum install -y gcc gcc-c++ glibc pcre-devel openssl-devel zlib-devel
# 4.将依赖包拷贝到空目录
[root@localhost ~]# find /var/cache/yum/ -name '*.rpm'|xargs cp -t /usr/local/src/
# 5.打包
[root@localhost src]# tar zcf nginx_yilaibao.tgz *.rpm
# 6.将打好的包发送给yum仓库
[root@localhost src]# scp /usr/local/src/nginx_yilaibao.tgz root@10.0.0.150:/var/ftp/pub
# 7.在yum仓库目录下,解压nginx依赖包
[root@qls pub]# tar xf nginx_yilaibao.tgz
# 8.解压nginx
[root@localhost ~]# tar xf nginx-1.16.1.tar.gz
# 9.生成
## 9.1 进入解压目录
[root@localhost ~]# cd nginx-1.16.1
## 9.2 创建app目录
[root@localhost nginx-1.16.1]# mkdir /app
## 9.3 创建nginx用户
[root@localhost nginx-1.16.1]# useradd nginx -s /sbin/nologin -M
## 9.4 生成MakeFile
[root@localhost nginx-1.16.1]# ./configure --prefix=/app/nginx-1.16.1 --user=nginx --group=nginx
# 10.编译
[root@localhost nginx-1.16.1]# make
# 11.安装
[root@localhost nginx-1.16.1]# make install 
# 12.添加nginx的启动脚本
[root@localhost logs]# vi /usr/lib/systemd/system/nginx.service

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/app/nginx/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /app/nginx/logs/nginx.pid
ExecStartPre=/app/nginx/sbin/nginx -t
ExecStart=/app/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

## 13.安装fpm
# 13.1 安装依赖
[root@localhost fpm]# yum install -y ruby ruby-devel rubygems rpm-build
# 13.2 更换gem源
[root@localhost fpm]# gem sources --remove https://rubygems.org/
[root@localhost fpm]# gem sources -a https://mirrors.aliyun.com/rubygems/
# 14.解压fpm包
[root@localhost fpm]# tar xf fpm-1.3.3.x86_64.tar.gz
# 15.安装所有gem结尾的包
[root@localhost fpm]# gem install *.gem
# 16.使用fpm命令打包
fpm -s dir -t rpm -n nginx -v 1.16.1 -d 'zlib-devel,pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /app/nginx-1.16.1/

进程管理的相关命令-ps

ps aux
a:查看所有的终端进程
x:查看所有的非终端进程
u:显示进程的用户
f:查看子进程
[root@qls ~]# ps auxf|grep nginx
o:自定义查看想要看的字段
[root@qls ~]# ps axo user,pid,%cpu,%mem,command
--sort:排序,可以根据ps的所有字段
[root@zls ~]# ps aux --sort %cpu


## 查看pid的额外命令
[root@qls ~]# pgrep nginx
[root@qls ~]# pidof nginx

1587355408465

进程管理命令-top

top


top - 12:19:36 up  3:37,  2 users,  load average: 0.00, 0.03, 0.05
# 12:19:36 :当前系统的时间
# up  3:37 :运行时长
# 2 users :当前登录的用户1
# load average: 0.00, 0.03, 0.05
服务器的负载:
0.00:1分钟的负载
0.03:5分钟的负载
0.05:15分钟的负载

Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
# 105 total:目前有105个工作任务
# 1 running:1个正在执行的
# 104 sleeping:104个在等待被执行的
# 0 stopped:没有被停止的
# 0 zombie:0个僵尸进程

%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 0.0 us:用户态(user用户使用cpu的百分比)
# 0.3 sy:内核态(system系统进程占用cpu的百分比)
# 0.0 ni:优先级
# 99.7 id:CPU空闲程度
# 0.0 wa:(wait等待状态的进程)
# 0.0 hi:硬中断
# 0.0 si:软中断
# 0.0 st:虚拟机(如果当前系统安装了虚拟机)KVM,vitural box

进程管理命令-top

top

top - 09:10:31 up 1 day, 28 min,  1 user,  load average: 0.00, 0.01, 0.05
# 09:10:31  :当前系统时间
# up 1 day, 28 min  :运行时间
# 1 user  :同时在线用户数量
# load average: 0.00, 0.01, 0.05
0.00 : 1分钟的负载
0.01 : 5分钟的负载
0.05 : 15分钟的负载


Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
# 105 total : 总共有多少个工作任务
# 1 running : 1个在运行
# 104 sleeping : 104个在等待
# 0 stopped:没有停止的
# 0 zombie:没有僵尸进程

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 0.0 us : 用户态
# 0.0 sy : 内核态
# 0.0 ni : 优先级
# 100.0 id : 空闲
# 0.0 wa :等待
# 0.0 hi : 硬中断
# 0.0 si : 软中断
# 0.0 st : 虚拟机(虚拟产品)

-d:指定变化时间
-p:只查看指定PID的进程
-u:只查看指定用户的进程
-b:保存到文件
-n:指定次数


# top 常见指令
h   查看帮出
z   高亮显示
1   显示所有CPU的负载
s   设置刷新时间
b   高亮现实处于R状态的进程
M   按内存使用百分比排序输出
P   按CPU使用百分比排序输出
R   对排序进行反转
f   自定义显示字段
k   kill掉指定PID进程
W   保存top环境设置 ~/.toprc
q   退出


# PID:进程id号 
# USER:用户
# PR:优先级
# NI:nice值
# VIRT:虚拟内存
# RES:真实内存
# SHR:共享内存
# S:进程状态
# %CPU:占用cpu的百分比
# %MEM:占用内存的百分比
# TIME+:进程运行时间
# COMMAND:进程运行的命令

什么是中断

中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求。

kill 信号管理

1587437768409

[root@qls ~]# 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	

//常见信号列表:
数字信号        信号别名        作用
1       HUP     挂起信号,往往可以让进程重新配置
kill -s HUP
kill -1

2       INT     中断信号,起到结束进程的作用,和ctrl + c 的作用一样
kill -s INT
kill -2

3       QUIT        让进程退出,结果是进程退出
kill -s QUIT
kill -3

9       KILL        直接结束进程,不能被进程捕获
kill -9
kill -s KILL

15      TERM        进程终止,这是默认信号
kill -15
kill -s TERM
kill

18      CONT        被暂停的进程将继续恢复运行
19      STOP        暂停进程
20      TSTP        用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停

优先级

# nice
-n:指定优先级
[root@qls ~]# nice -n -20 tail -f /var/log/messages

# renice
[root@qls ~]# ps axo nice,command|grep sshd
[root@qls ~]# renice 19 9962

后台进程管理

&:将进程放在后台执行
Ctrl + z:暂停
bg:(background)后台
fg:调出


# screen
[root@qls ~]# yum install -y screen
# 查看有几个screen起的后台进程
[root@qls ~]# screen -ls
# 调出后台进程
[root@qls ~]# screen -r 10694
# 创建后台进程
[root@qls ~]# screen 
# 创建后台进程并命名
[root@qls ~]# screen -S 又瞎玩
# nohup
[root@qls ~]# nohup sh a.sh &
原文地址:https://www.cnblogs.com/zabcd/p/13289875.html