歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 進程管理 [screen/ps/kill]

Linux 進程管理 [screen/ps/kill]

日期:2017/2/28 16:06:40   编辑:Linux教程

進程管理

進程的重要性:

我們在使用操作系統時,各項作業都是通過某個PID來執行的,因此,是否要執行某項作業就與該進程的權限相關

如果Linux系統很忙碌,當整個系統資源快要用完的時候,怎麼找到大量占用系統資源的進程,刪除該進程,讓系統恢復正常

如果由於進程寫的不好,導致內存中產生有問題的進程,怎麼找到它,然後刪除呢?

同時在系統中運行5--6項作業,但其中有一項作業才是最重要的,如何讓那一項重要的作業優先執行呢?

我們在操作的時候經常會碰到這樣的問題 在同一個登錄界面不退出怎麼復制文件到另一個文件、不退出當前進程怎麼去查看另一個文件,在說進程管理之前說一下


作業管理(job control):

每個作業都是當前bash的一個子程序,彼此間是有關聯的,所以我們無法用管理作業的方式由tty1的環境去管理tty2的bash。在進行bash作業管理時,必須要注意到的限制:

1)程序必須是shell的子程序; 2)程序不能等待terminal/shell 的輸入

在bash環境下,“前台”和“後台”我們可以這樣理解,前台(foreground)即為 你可以操控的作業 ,後台(background)指在內存中自動運行的進程,無法直接接觸,要控制就需要用到作業/系統調用

如何將作業放到後台呢?可以使用“&”

e.g. 我們要將/etc/備份為/tmp/etc.tar.gz 同時,又想進行其他的操作,可以這樣做:

  1. tar -xpcf /tmp/etc.tar.gz /etc/ &

1. screen 屏幕切換

使用ssh遠程連接 linux服務器工作的時候,比如需要編譯某些程序而這時網絡不穩定斷線, 工作就白干了, 又的重新連接重復剛才的工作,這時候screen就可以派上用場了。
養成好習慣多用 screen!
1).安裝screen
---------------------------------
yum install screen
--------------------------------
2).運行 screen
--------------------------------
screen
--------------------------------
3).用法
Ctrl+a 然後按c 建立一個新的screen 會話
Ctrl+a 然後按n 跳轉到下一個screen 會話
Ctrl+a 然後按p 返回到上一個screen 會話
Ctrl+a 然後按d 將當前的screen 會話放在背景執行 // 返回到最開始的工作環境
Ctrl+a 然後按(大寫)S 分離一個screen 會話出來,分離後用Ctrl+a 然後按tab鍵 在分離出來的各screen間跳轉。
screen -ls 列出當前所有的screen會話
screen -r 進程號 之前Ctrl+a 然後按d 放在背景執行的會話 呼叫回來。
ssh中如果發生了突然斷線 那麼你重新登陸後 screen -ls 會發現 有screen的狀態是處於(Attached)狀態 此刻我們使用 screen -d 將他強行放到背景,然後再用screen -r 進程號將他呼叫回來。
如果 screen -ls 看到有死亡的會話 可以用screen -wipe 進程號 將他殺掉。
e.g.
#screen -list可以看到正在運行的screen實例
There is a screen on:
80338.ttyp3.chh (Detached)
1 Socket in /tmp/screens/S-chh.
返回screen -r 80338
徹底退出:#exit

2. ctrl+[z]將“當前”作業放到後台“暫停”

3. fg將後台作業拿到前台處理

4. bg將前台作業拿到後台運行

5. & 直接將命令放到後台“執行”

6. jobs觀察作業狀態

觀察進程運行情況:

ps

查看進程:
ps: process 查看 龐大而古老的一個指令

參數:

進程相關和進程無關

後台進程和終端無關 如:打開電腦輸出的提示信息
跟終端相關的進程:用戶的默認SHELL 發起 附屬於領頭SHELL 進程

-e/A:顯示所有進程 能顯示有關和無關的進程

a: 跟終端無關的所有進程 a 和 x 是關於BSD的
x: 跟終端有關
-u: 顯示進程是由哪個用戶發起
-F: 顯示額外信息
j: jobs work
h:進程間的關系 采取縮進的方式
-o:自己定義顯示那些字段 用逗號隔開

常見的查看進程組合
e.g.

ps aux // 這命令比較常用
ps axjf // 這兩命令比較常用
ps -ef
ps ejh
ps -eo pid,%cpu,comm
//分段查看

ps信息顯示常見5段分析: ps 為雙向循環列表
1 PID: 進程號 計算機通過結構體表示每一個進程 task_structure; 由堆和進站給出
2 PPID: 父進程進程號
3 tty : 與進程相關的內容
4 STAT: 進程狀態
5 time: 處理時間
6 command: 發起的進程

ps -l

[root@node1 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12559 12557 0 75 0 - 1160 wait pts/0 00:00:00 bash
4 R 0 20121 12559 0 77 0 - 1054 - pts/0 00:00:00 ps

F :表示這個進程的標志位(flag), 4 表示用戶為超級用戶
S :表示這個進程的狀態 (stat)
C :cpu 使用的的只有百分比
PID /PPID: 很常見的進程和父進程
NI :nice 值 用於修改進程優先級
ADDR: 核心功能,指出該進程在內核的那一部分,怎麼運行
SZ: 用掉的內存大小
WCHAN: 當前進程是否在運行 - 表示正在運行
TTY :終端位置
TIME :用掉的CPU時間
CMD: 所執行的命令

特別說明:由於ps 能夠支持的OS類型相當多,所以它的參數非常多,而且 是否加 “-” 也回有很大的差別(BSD中 一般不需要加-)

具體該怎麼操作呢? 參考 man ps

top

格式: top [-d] | top [-bnp]

參數:

-d: 更新的秒數。 默認5秒

-b: 以批處理的方式執行top

在top執行過程中可以使用下列按鍵查看命令:

?: 顯示在top中可以輸入的按鍵命令
P:按CPU的使用資源排序顯示
M:按內存的使用資源排序顯示
T:按該進程的時間積累(TIME+)排序
k: 給某個PID一個信號
r: 給某個PID重新確定一個值

Copyright © Linux教程網 All Rights Reserved