進程控制-ps、top
阿新 • • 發佈:2018-06-18
ont 滿足 lastlog 計算 stopped 多個進程 代碼 詳細信息 第一部分 進程控制
ps、top
查看系統內核:# uname -r -n -a
# cat /etc/redhat-release
# lsb_release -d
網卡IP地址:# ifconfig
# ping -c n(次數) IP|hostname
# setup|/etc/sysconfig/network-scripts/ifcfg-ethx
# uptime
# lastlog
進程查看:
進程是正在運行的程序,或者說是已啟動的可執行程序的運行實例,進程具有自己的生命周期和各種不同的狀態。
特點:
1、獨立性,進程是系統中獨立存在的實體,它可以擁有自己的獨立資源,每一個進程都有自己的私有地址空間。在沒有經過進程本身允許的情況下,一個用戶進程不可以直接訪問其他進程的地址空間。
2、動態性,進程與程序的區別在於,程序只是一個靜態的指令集合,而進程是一個正在系統中活動的指令集合。進程具有自己的生命周期和各種不同的狀態。
3、並發性,多個進程可以在單個處理器上並發執行,多個進程之間不會互相影響。
線程:也被稱作輕量級進程,線程是進程的執行單元,一個進程可以有多個線程。
線程不擁有資源,它與父進程的其它線程共享該進程所擁有的資源。線程的執行時搶占式的。
程序: 二進制文件,靜態 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix
進程: 是程序運行的過程, 動態,有生命周期及運行狀態。
進程的生命周期:
父進程復制自己的地址空間(fork)創建一個新的(子)進程結構。每個新進程分配一個唯一的進程 ID (PID),滿足跟蹤安全性之需。PID 和 父進程 ID (PPID)是子進程環境的元素,任何進程都可以創建子進程,所有進程都是第一個系統進程的後代:
子進程繼承父進程的安全性身份、過去和當前的文件描述符、端口和資源特權、環境變量,以及程序代碼。隨後,子進程可能exec自己的程序代碼。通常,父進程在子進程運行期間處於睡眠(sleeping)狀態。當子進程完成時發出(exit)信號請求,在退出時,子進程已經關閉或丟棄了其資源環境,剩余的部分稱之為僵停(僵屍Zombie)。父進程在子進程退出時收到信號而被喚醒,清理剩余的結構,然後繼續執行其自己的程序代碼。
進程的狀態:
R 運行
S 可中斷睡眠 Sleep
D 不可中斷睡眠
T 停止的進程
Z 僵屍進程
X 死掉的進程 【看不見】
靜態查看進程——ps:
ps:用來查看進程信息,功能強大,用法也比較復雜,最常用用的參數有:ps aux ,ps -ef ,ps -ely
選項:
a:顯示現行終端機下的所有進程,包括其他用戶的進程;
u:顯示進程擁有者、狀態、資源占用等的詳細信息(註意有“-”和無“-”的區別)。
x:顯示沒有控制終端的進程。通常與 a 這個參數一起使用,可列出較完整信息。
-e:顯示所有進程。
-f:完整輸出顯示進程之間的父子關系
-l:較長、較詳細的將該 PID 的的信息列出;
註:ps -aux 不同於 ps aux
ps aux:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19356 1432 ? Ss 19:41 0:03 /sbin/init
說明:
USER: 運行進程的用戶
PID: 進程ID
%CPU: CPU占用率
%MEM: 內存占用率
VSZ: 占用虛擬內存
RSS: 占用實際內存 駐留內存
TTY: 進程運行的終端
STAT: 進程狀態 man ps (/STATE)
R 運行
S 可中斷睡眠 Sleep
D 不可中斷睡眠
T 停止的進程
Z 僵屍進程
X 死掉的進程
Ss s進程的領導者,父進程
S< <優先級較高的進程
SN N優先級較低的進程
R+ +表示是前臺的進程組
Sl 以線程的方式運行
START: 進程的啟動時間
TIME: 進程占用CPU的總時間
COMMAND: 進程文件,進程名
ps aux --sort -%cpu|head
auxf:顯示父子關系
axo:自定義顯示字段
# ps axo user,pid,%cpu,%mem,rss,command|head
pidof 進程名:查看指定進程的PID
pstree:查看進程樹
動態查看進程——top
在top的執行過程中,還可以使用以下的按鍵命令:
h|? 幫助
M 按內存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 對排序進行反轉
f 自定義顯示字段
1 顯示當前系統的cpu的邏輯數量
T:按該進程使用的CPU時間累積排序
k:給某個PID一個信號(signal),默認值是信號15
r:重新安排一個進程的優先級別
s:改變兩次刷新之間的時間。默認是5秒
q:退出程序。
top命令常用的選項:
-d:後面可以接秒數,指定每兩次屏幕信息刷新之間的時間間隔;
-p:指定某個進程來進行監控;
-b -n:以批處理方式執行top命令。通常使用數據流重定向,將處理結果輸出為文件;
top查看
第一部分:系統整體統計信息
top - 14:15:04 up 47 min, 2 users, load average: 0.25, 0.18, 0.12
Tasks: 235 total, 1 running, 234 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.9%us, 1.0%sy, 0.0%ni, 90.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 7944064k total, 746164k used, 7197900k free, 35724k buffers
Swap: 1048568k total, 0k used, 1048568k free, 261492k cached
load average: 0.86, 0.56, 0.78 : 系統最近 1分鐘,5分鐘,15分鐘的平均負載
計算方法:平均負載/邏輯cpu數量
查看物理CPU的個數
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
查看邏輯CPU的個數
#cat /proc/cpuinfo |grep "processor"|wc -l
查看CPU是幾核
#cat /proc/cpuinfo |grep "cores"|uniq
一般來說,物理CPU個數×每顆核數就應該等於邏輯CPU的個數,如果不相等的話,則表示服務器的CPU支持超線程技術
nice,renice調整進程的優先級
-20 ~ 19 數字越低,優先級越高,系統會按照更多的cpu時間給該進程
更改現有進程的nice級別
1. 使用top更改nice級別
r 調整進程的優先級(Nice Level) (-20高) ---0--- (19低)
2. 使用shell更改nice級別
# renice -* PID eg:# renice -20 10089
進程控制:
kill,killall,pkill,skill
給進程發送信號
# kill -l 列出所有支持的信號
編號 信號名
1) SIGHUP 重新加載配置
2) SIGINT 鍵盤中斷^C
3) SIGQUIT 鍵盤退出
9) SIGKILL 強制終止
15) SIGTERM 終止(正常結束),缺省信號
18) SIGCONT 繼續
19) SIGSTOP 停止
20)SIGTSTP 暫停^Z
# fg 把最後放在後臺運行的進程再次放到終端前臺
# fg %1 將作業1調回到前臺
# bg %2 把後臺編號為2的進程恢復運行狀態
# w
14:08:50 up 4:06, 5 users, load average: 0.25, 0.55, 0.70
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 10:04 4:04m 12:48 12:48 /usr/bin/Xo
root pts/0 :0.0 10:04 0.00s 38.47s 0.02s w
root pts/2 :0.0 10:04 2:29m 0.07s 0.07s bash
root pts/3 :0.0 10:04 3:41m 0.00s 0.00s bash
root pts/4 172.16.1.180 13:55 11:41 3:07 46.62s rsync -alvR
說明:
user:登錄的用戶名
tty:登錄後系統分配的終端號
from:遠程主機,即從哪裏登錄的
login@:何時登錄
idle:空閑了多長時間,表示用戶閑置的時間。這是一個計時器,一旦用戶執行任何操作,該計時器便會被重置。
jcpu:和該終端(tty)連接的所有進程占用的cpu時間,這個時間裏並不包括過去的後臺作業時間,但卻包括當前正在運行的後臺作業 所占用的時間
pcpu:指當前進程(即what項中顯示的進程)所占用的cpu時間。
what:當前正在運行進程的命令行。
進程控制-ps、top