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 &


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM