1. 程式人生 > 實用技巧 >Linux 程序管理

Linux 程序管理


程序管理


程序的生命週期:

​ 主程序pid收到資訊需要處理資料的時候一般會讓子程序去處理,子程序ppid處理完了之後再去把返回的結果交給主程序,如果在這個過程中主程序死了,那麼子程序就會變成殭屍程序;子程序掛了對主程序沒有影響。


監控程序的命令ps


ps -aux

a	# all檢視所有終端程序
x	# 檢視所有的非終端程序
u	# user   這個程序啟動的使用者有哪些

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 125304  3832 ?        Ss   06:23   0:02 /usr/lib/systemd/systemd --switched-
root          2  0.0  0.0      0     0 ?        S    06:23   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    06:23   0:02 [ksoftirqd/0]

USER         啟動該程序的使用者
PID 		程序的pid號
%CPU 		佔用cpu的百分比
%MEM    	佔用記憶體的百分比
VSZ  		虛擬記憶體 (程序佔用的虛擬記憶體)
RSS 		真實實體記憶體 (程序佔用真實的記憶體空間)
TTY			執行的終端
	?		核心執行的終端
	tty1	 機器執行的終端
	pts/0		遠端連線的終端
	
STAT			程序的狀態
	D		無法終端的休眠狀態(和i/o有關的程序)
	R		正在執行的程式
	S		休眠狀態的
	T		暫停或者被追蹤的狀態
	W		進入交換記憶體
	X		死掉的程序
	Z		殭屍程序
	<		優先順序高的程序
	N		優先順序低的程序
	s		父程序還有子程序
	l		以執行緒方式執行
	L		有些頁被鎖進記憶體
	|		多程序的
	+		正在執行的程式
	
START 			程序被觸發啟動的時間
TIME			該程序實際使用cpu的執行時間
COMMAND			程序的啟動命令是


--sort
ps aux --sort=%cpu
USER        
PID 
%CPU 
%MEM    
VSZ   
RSS 
TTY     
STAT 
START   
TIME 
COMMAND
 
一種排序方法,sort=的內容必須是命令結果有的。 + - 可以順序或者倒序

[root@fpm_nginx ~]# ps axo user,pid,%cpu,%mem,command

檢視程序額外的命令
pgrep
[root@fpm_nginx ~]# pgrep nginx
pgrep -l -a

pidof
[root@fpm_nginx ~]# pidof nginx

[root@fpm_nginx ~]# yum -y install psmisc
pstree 命令,可以檢視子程序

grep過濾程序的時候不顯示grep
ps -ef | grep [n]ginx



kill-訊號管理


kill 
pkill 
killall

kill
-l		# 檢視訊號
[root@fpm_nginx ~]# 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 -s KILL
kill -9

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:			# 放在後臺
fg:			# 調出

screen
# 新建後臺的程序
[root@fpm_nginx ~]# screen

# 指定後臺程序的名稱
[root@fpm_nginx ~]# screen -S ping

ctrl+ad 返回到終端

# 檢視後臺的程序
[root@fpm_nginx ~]# screen -ls

# 檢視後臺程序
[root@fpm_nginx ~]# screen -r 20068

nohup
[root@fpm_nginx ~]# nohup sh a.sh &