一、程序、進程、線程
1.程序是一個普通文件,是一系列指令和數據的集合,是一個靜態的實體,是程序員寫好之後存儲於外設之上的代碼。它是"死"的,而進程和程序都是"活"的。
2.進程是程序的執行實例,即運行中的程序,同時也是程序的一個副本;程序是放置於磁盤的,而程序是位於內存中的。每一個進程都分配一個ID號。
每一個進程,都會對應一個父進程,而這個父進程可以復制多個子進程。例如WWW服務器。
3.線程是比進程更小的執行單元,一個進程至少包括一個線程。一個進程要想同時在多顆CPU上運行,必須得分成互不影響的多個執行流,這些執行流就是線程。
進程有獨立的內存地址空間,線程沒有
線程不能獨立存在,它是由進程創建的。(在linux下是fork,在java下是Thread)
二、進程的分類
按照進程的功能和運行的程序分類,進程可劃分為兩大類:
系統進程:可以執行內存資源分配和進程切換等管理工作;而且,該進程的運行不受用戶的干預,即使是root用戶也不能干預系統進程的運行。
用戶進程:通過執行用戶程序、應用程序或內核之外的系統程序而產生的進程,此類進程可以在用戶的控制下運行或關閉。
針對用戶進程,又可以分為交互進程、批處理進程和守護進程三類。
交互進程:由一個shell終端啟動的進程,在執行過程中,需要與用戶進行交互操作,可以運行於前台,也可以運行在後台。
批處理進程:該進程是一個進程集合,負責按順序啟動其他的進程。
守護進程:守護進程是一直運行的一種進程,經常在linux系統啟動時啟動,在系統關閉時終止。它們獨立於控制終端並且周期性的執行某種任務或等待處理某些發生的事件。
例如httpd進程,一直處於運行狀態,等待用戶的訪問。還有經常用的crond進程,這個進程類似與windows的計劃任務,可以周期性的執行用戶設定的某些任務。
二、ps命令—靜態顯示系統執行的進程
ps命令是用來查看目前系統中,有哪些正在執行,以及它們執行的狀況。可以不加任何參數
顯示詳細的進程信息
1、 ps -a :意思是說顯示當前終端的所有進程信息。
2、以用戶的格式顯示進程信息。
ps -u :以用戶的格式顯示進程信息。
3、顯示後台進程運行參數:
ps -x :顯示後台進程運行的參數。
4、可以使用ps -aux 顯示全面的進程信息。
Linux下顯示系統進程的命令ps,最常用的有ps -ef 和ps aux。
ps -ef 是用標准的格式顯示進程的、其格式如下
其中各列的內容意思如下
UID //用戶ID、但輸出的是用戶名
PID //進程的ID
PPID //父進程ID
C //進程占用CPU的百分比
STIME //進程啟動到現在的時間
TTY //該進程在那個終端上運行,若與終端無關,則顯示? 若為pts/0等,則表示由網絡連接主機進程。
CMD //命令的名稱和參數
ps aux 是用BSD的格式來顯示、其格式如下
同ps -ef 不同的有列有
USER //用戶名
%CPU //進程占用的CPU百分比
%MEM //占用內存的百分比
VSZ //該進程使用的虛擬內存量(KB)
RSS //該進程占用的固定內存量(KB)(駐留中頁的數量)
STAT //進程的狀態
START //該進程被觸發啟動時間
TIME //該進程實際使用CPU運行的時間
其中STAT狀態位常見的狀態字符有
D //無法中斷的休眠狀態(通常 IO 的進程);
R //正在運行可中在隊列中可過行的;
S //處於休眠狀態;
T //停止或被追蹤;
W //進入內存交換 (從內核2.6開始無效);
X //死掉的進程 (基本很少見);
Z //僵屍進程;
< //優先級高的進程
N //優先級較低的進程
L //有些頁被鎖進內存;
s //進程的領導者(在它之下有子進程);
l //多線程,克隆線程(使用 CLONE_THREAD, 類似 NPTL pthreads);
+ //位於後台的進程組;
四、終止進程kill/killall
終止某個進程:kill 進程號
kill 16251 :表示終止進程號為16251的進程。
kill -9 16251 :因為有些進程會捕捉某些信號。如果直接不能結束進程可以用“-9”傳送信息。強制終止
killall 進程名 可以清除進程及進程相關的子進程
killall -u username 可以殺死某一用戶的所有進程
五、前後台作業管理
前台作業:占據了命令提示符
後台作業:啟動之後,釋放命令提示符,後續的操作在後台完成
前台-->後台:
①Ctrl+z: 把正在前台的作業送往後台,並且作業處於Stopped狀態
②COMMAND &:讓命令在後台執行
後台-->前台
fg 標號
bg讓後台停止的作業繼續運行
fg讓後台的作業調往前台
jobs查看後台所有作業
六、動態監控進程top 退出top按q鍵或ctrl+c鍵即可退出
top與ps命令很相似。它們都用來顯示正在執行的進程。top與ps最大的不同之處,在於top在執行一段時間可以更新正在運行的進程。
退出:ctrl+c
1、監視特定用戶
top :輸入此命令,按回車鍵,查看執行的進程。
u :然後輸入"u"回車,再輸入用戶名,即可。
2、終止指定的進程
top :輸入此命令,按回車鍵,查看執行的進程。
k :然後輸入"k"回車,再輸入要結束的進程ID號。
3、指定系統狀態更新的時間
top -d 10 :指定系統更新進程的時間為10秒。
14:06:22 up系統時間
4 min, 系統啟動多久
1 user, 當前登陸到linux有多少用戶
load avcragc: 0.02, 0.12, 0.07負載平衡,當前系統的負載情況(可全加除3大於0.6表示系統負載緊張)
37 processes:當前進程數
36 sleeping, 休眠狀態進程數
1 running, 正在運行進程數
0 zombie,僵屍進程數 進程無用後仍占用內存的進程數
0 stopped處於停止狀態的進程數
CPU states: 0.0% user 0.1% system 0.0% nice 0.0% iowait 99.8% idle
CPU的狀態 idle為CPU閒置狀態(越大越好)
Men: 255264k av, 39420k used, 215836k free, 0k shrd, 5520k buff
30632k actv, 140k in_d, 292k in_c
內存使用情況
255264k av,內存總數量
39420k used,正在使用內存數量
215836k free,空閒內存數量
Swap: 257032k av, 0k used, 257032k free 19376k cached
swap分區(虛擬內存)使用情況
swap: 257032k av,swap分區(虛擬內存)數量
0k used, 正在使用虛擬內存數量
257032k free空閒虛擬內存數量
19376k cached緩存內存
七、任務調度命令
概述:
任務調度:是指系統在某個時間執行的特定的命令或程序。
任務調度分類:
1、系統工作:有些重要的工作必須周而復始的執行。如病毒掃描等。
2、個別用戶工作:個別用戶可能希望執行某些程序。
設置任務調度文件:/etc/crontab
設置個人任務調度。執行crontab -e命令。接著輸入任務到調度文件
例:5 * * * * ls -l /etc/ > /tmp/to.txt
意思說每小時的第五分鐘執行ls -l /etc/ > /tmp/to.txt命令
任務調度的使用crontab
1、設置任務 crontab -e
2、每隔一定時間去執行
date > /home/mydatal (將當前時間覆蓋寫入mydata1文件中。>為覆蓋寫)
date顯示當前時間
1)希望每天凌晨2:00去執行 date >> /home/mydate2 (>>為追加寫)
0 2 * * * date >> /home/mydate2
2)希望每分鐘去執行
* * * * * date >> /home/mydate2
調度文件規則:
字段名稱 說明 范圍
分鐘 每小時中的第幾分鐘執行 0-59
小時 每日的第幾個小時執行 0-23
日期 每月的第幾天執行 1-31
月歷 每年的第幾個月執行 1-12
星期 每周的第幾天執行 0-6
命令名稱 欲執行的命令名稱及其參數
3、怎樣去調度多個任務?
1)在crontab -e 中直接寫多個任務 (優點:簡單;缺點:太多太亂修改不方便)
2)可以把所有的任務,寫入到一個可執行文件(shell編程)推薦
.sh文件為shell文件,chmod 744 mytask.sh 要使它成為可執行文件 切記
vi mytask.sh
date >> /home/mydate2
cp /home/mydate2 /root/
:wq
crontab -e
* * * * * /root/mytask.sh
4、如何終止任務
終止任務調度:
crontab -r :終止任務調度 (多任務多用戶使用時禁用此命令)
crontab -l :列出當前有那些任務調度
http://xxxxxx/Linuxjc/1175512.html TechArticle