進程管理和計劃任務

進程管理使用的工具以及命令,計劃任務的創建和執行,以及工作中需要的注意事項

進程

  • 每個進程都有唯一的編號,在/proc下可以看到,每個文件夾就代表一個進程,
  • { }中的進程表示線程,每個進程有一個或者多個線程
  • 每個線程獨立工作,線程共享磁盤空間
  • 父進程被殺,子進程自動消失
  • 圖形界面比較占資源,建議關閉圖形界面,用時開啟切換
  • 如果一個進程占用的內存資源一致在增長,那么說明該程序開發有問題

 

Process :程序運行起來就叫進程,運行程序的一個副本,是被載入內存的一個指令集合

進程ID(process ID ,PID)號碼被用來標記各個進程

UID,GID,SELINUX決定對文件系統的存取和訪問權限

通常從執行進程的用戶來繼承

進程存在生存周期

CENTOS6中第一個進程為 init (進程號為1),其余都為init的子進程

CENTOS7中第一個進程為 system (進程號為1),其余的為system的子進程

 

進程創建:父子進程

進程都由其父進程創建

開啟一個子進程,只有當子進程發生數據更改時,則在內存中開辟一塊空間(COW寫時復制)

進程優先級

系統優先級:數字越小,優先級越高(0-99)

實時優先級:數值越大,優先級越高

Nice值:值越高,優先級越小,可以手動調整(-20—-19)

Renice ?-n ??# ?:可以調整nice優先級(程序在運行狀態調整nice值)

指定以#優先級運行程序

Nice ?-n ?5 ?ping 127.0.0.1

Pri:priority 優先級

Psr:processor CPU編號

Rtprio:實時優先級

例:ps ?axo ?cmd,pid,ni,pri,rtprio

進程類型

守護進程:daemon,開機自動啟動,和終端無關,不需要用戶登錄即可啟動

前臺進程:和終端有關,需要用戶登錄啟動

守護進程和前臺進程可以相互轉化

進程狀態

運行狀態,就緒狀態,睡眠狀態,停止狀態,僵死狀態

R:運行或就緒狀態

D:不可中斷的睡眠

S:可中斷的睡眠

T:停止狀態

Z:僵死狀態(該狀態太多會影響系統性能,重啟之后恢復)

<:高優先級進程

N:低優先級進程

t:前臺進程組中的進程

l:多線程進程

s:會話(子進程)發起者

+:前臺進程

 

 

 

進程命令

Pstree:顯示樹狀進程(進程樹)

-p:顯示進程pid

-p ?user:顯示該用戶的進程

-ps #:查看和自己有父子關系的進程,包括自己,自己的父進程和子進程(centos7可用)

-H:高亮顯示(沒有顏色)

Ps:process stats 顯示當前進程狀態

顯示當前終端下的進程

 

三種風格選項

Unix ??-options

BSD ??options ?直接跟選項

GNU ??–options 長選項

 

BSD選項

a :顯示所有和終端相關的進程

x :和終端無關的進程(?表示)

u :顯示進程所有者的信息

 

Ps ?auxf :以樹狀顯示進程

o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem

k|–sort 屬性 對屬性排序,屬性前加- 表示倒序(centos7上好用)

L:顯示支持的屬性列表

 

UNIX風格選項

-C:cmdlist指定命令,多個命令用,隔開(相當于過濾)

-L:顯示線程

-e:顯示所有進程,相當于-A

-f:顯示完整格式的程序信息

-F:顯示更完整格式的進程信息

-H:以進程層級格式顯示進程的相關信息

-u:userlist 指定有效用戶ID或名稱

-U:指定真正的用戶ID或名稱(SUID)

-g:gid或grouplist 指定有效的gid或組名稱

-G:指定真正的gid或者組名(SGID)

-p:顯示指定pid的進程

–ppid pid ?:顯示屬于pid的子進程

 

例:ps -x ?查詢你擁有的所有進程(哪個用戶登錄,就顯示哪個用戶的進程)有效用戶

Ps -fU username|UID :顯示指定用戶(RUID)的進程(發起者的進程,有效用戶也會顯示)

Ps -fu username|UID :顯示指定用戶(EUID)的進程(不顯示 有效用戶的進程,如psswd不會顯示)

Ps -fG groupname:列出該組名所擁有的所有進程

Ps -fg groupname:列出有效組名所擁有的有效進程

Ps -fp pid ?通過進程ID來顯示所屬的進程

Ps -f –ppid uid:以父進程ID 來顯示其下所有的進程

Ps -ft 終端:按照終端來顯示所屬進程

Ps -e –forest:以進程樹顯示系統中的進程如何互相鏈接

Ps -f –forest -C 進程名稱:以進程樹顯示指定的進程

查找占用最多內存和CPU的進程:

ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head

ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head

 

Pgrep

pgrep [options] pattern (表達式)

-u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程 (只顯示進程ID,配合-l使用)

-l: 顯示進程名

-a: 顯示完整格式的進程名

-P pid: 顯示指定進程的子進程

 

Pidof ?查看進程名

Pidof ?進程名

例:pidof ?bash |httpd

Uptime 負載

顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分鐘的平均負載,一般不會超過1)

Top 動態查看進程狀態

-d #:指定刷新時間間隔,默認為3秒

-b:全部顯示,所有進程

-n #:刷新多少次后退出

 

欄位信息簡介

us:用戶空間

sy:內核空間

ni:調整nice時間

id:空閑

wa:等待IO時間

hi:硬中斷

si:軟中斷(模式切換)

st:虛擬機偷走的時間

 

M:根據駐留內存大小排序

P: 根據cpu使用百分比進行排序(默認就是cpu排序)

T: 根據累計時間進行排序

l:是否顯示平均負載和啟動時間

t:是否顯示進程和cpu狀態相關信息

m:是否顯示內存相關信息

c :是否顯示完整的命令行信息

q:退出top

k:終止某個進程

W:保存文件

z:添加顏色

 

Htop(top升級版自帶顏色,需要epel安裝)

-d #:指定延遲時間

-u username:僅顯示指定用戶的進程

-s colume:以指定字段進行排序

 

子命令

s : 跟蹤選定進程的系統調用

l : 顯示選定進程打開的文件列表

a :將選定的程序綁定至某指定的CPU核心

t : 顯示進程樹

?

Lsof ?-i ?:+端口號 ?。翰榭茨膫€進程使用該端口號

 

Vmstat: 虛擬內存信息

-s:顯示內存的統計數據

 

 

procs:

r:可運行(正運行或等待運行)進程的個數,和核心數有關

b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)

memory:

swpd: 交換內存的使用總量

free:空閑物理內存總量

buffer:用于buffer的內存總量

cache:用于cache的內存總量

swap:

si:從磁盤交換進內存的數據速率(kb/s)

so:從內存交換至磁盤的數據速率(kb/s)

io:

bi:從塊設備讀入數據到系統的速率(kb/s)

bo: 保存數據至塊設備的速率

system:

in: interrupts 中斷速率,包括時鐘

cs: context switch 進程切換速率

cpu:

us:Time spent running non-kernel code 用戶空間

sy: Time spent running kernel code 內核空間

id: Time spent idle. Linux 2.5.41前,包括IO-wait time. ??空閑

wa: Time spent waiting for IO. 2.5.41前,包括in idle. ?等待io時間

st: Time stolen from a virtual machine. 2.6.11前, unknown. ?被偷走的時間

Iostat:統計cpu和設備的IO信息

查看哪塊磁盤的壓力大

 

 

例?:iostat 1 ?10 ?每一秒執行此,執行10次以后推出

Pmap:查看進程和內存的映射關系

Pmap ?options ?pid

-x:顯示詳細格式的信息

Glances:epel源 ?遠程監控主機狀態

 

常用選項:

-b: 以Byte為單位顯示網卡數據速率

-d: 關閉磁盤I/O模塊

-f /path/to/somefile: 設定輸入文件位置

-o {HTML|CSV}:輸出格式

-m: 禁用mount模塊

-n: 禁用網絡模塊

-t #: 延遲時間間隔

-1:每個CPU的相關數據單獨顯示

 

C/S模式下運行glances命令

v服務器模式:

glances -s -B IPADDR

IPADDR: 指明監聽的本機哪個地址

v客戶端模式:

glances -c IPADDR

IPADDR:要連入的服務器端地址

dstat命令:系統資源統計,代替vmstat,iostat

dstat [-afv] [options..] [delay [count]]

-c: 顯示cpu相關信息

-C #,#,…,total

-d: 顯示disk相關信息

-D total,sda,sdb,…

-g:顯示page相關統計數據

-m: 顯示memory相關統計數據

-n: 顯示network相關統計數據

-p: 顯示process相關統計數據

-r: 顯示io請求相關的統計數據

-s: 顯示swapped相關的統計數據

–tcp

–udp

–unix

–raw

–socket

–ipc

–top-cpu:顯示最占用CPU的進程

–top-io: 顯示最占用io的進程

–top-mem: 顯示最占用內存的進程

–top-latency: 顯示延遲最大的進程

Iotop : 用來監視磁盤I/O使用狀況的top類工具

iotop具有與top相似的UI,其中包括PID、用戶、I/O、進程等相關信息??刹榭疵總€進程是如何使用IO

 

iotop輸出

第一行:Read和Write速率總計

第二行:實際的Read和Write速率

第三行:參數如下:

線程ID(按p切換為進程ID)

優先級

用戶

磁盤讀速率

磁盤寫速率

swap交換百分比

IO等待所占的百分比

線程/進程命令

options

-o, –only只顯示正在產生I/O的進程或線程。除了傳參,可以在運行過程中按o生效。

v-b, –batch非交互模式,一般用來記錄日志。

v-n NUM, –iter=NUM設置監測的次數,默認無限。在非交互模式下很有用。

v-d SEC, –delay=SEC設置每次監測的間隔,默認1秒,接受非整形數據例如1.1。

v-p PID, –pid=PID指定監測的進程/線程。

v-u USER, –user=USER指定監測某個用戶產生的I/O。

v-P, –processes僅顯示進程,默認iotop顯示所有線程。

v-a, –accumulated顯示累積的I/O,而不是帶寬。

v-k, –kilobytes使用kB單位,而不是對人友好的單位。在非交互模式下,腳本編程有用

-t, –time 加上時間戳,非交互非模式

-q, –quiet 禁止頭幾行,非交互模式,有三種指定方式

Kill命令

不能kill ?-9 ?1 ,雖然殺不死,但是會重傷,可能會影響一些程序的正常運行

 

向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫

顯示系統可用信號: ?kill -l ???或者 ??grap ?-l

 

信號分類

0、測試信號,查看該進程是否在存在

  • SIGHUP:無須關閉進程而讓其重讀配置文件
  • SIGINT:中止正在運行的進程,相當于ctrl+c
  • SIGQUIT:相當于ctrl+\
  • SIGKILL:強制殺死正在運行的進程
  • SIGTERM:終止正在運行的進程(正常終止)(默認信號)
  • SIGCONT:繼續運行

19、SIGSTOP:后臺休眠

指定信號的方法:

(1) 信號的數字標識:1, 2, 9

(2) 信號完整名稱:SIGHUP (3) 信號的簡寫名稱:HUP

 

用法?,options

按PID:kill [-SIGNAL] pid …

kill –n SIGNAL pid;

kill –s SIGNAL pid

例:kill ?-# ??pid

Killall ???按名稱:killall [-SIGNAL] comm…

Killall ?-9 ?sleep:殺掉所有sleep進程

按模式:pkill [options] pattern

 

-SIGNAL :僅pkill可用

-u uid: effective user,生效者

-U uid: real user,真正發起運行命令者

-t terminal: 與指定終端相關的進程

-l: 顯示進程名(pgrep可用)

-a: 顯示完整格式的進程名(pgrep可用)

-P pid: 顯示指定進程的子進程

 

作業管理

前臺作業:通過終端啟動,且啟動后一直占據終端;

后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)

 

讓作業運行于后臺(作業放到后臺,默認為休眠狀態)

運行中的作業:ctrl+z

尚未運行的作業:command ?&

查看當前終端放在后臺的所有作業:jobs

Fg (jobs—num作業號):把后臺作業調回前臺(%可省略)

Bg (jobs—num作業號):讓送往后臺的作業在后臺繼續運行(%可省略)

Kill ?(jobs—num作業號):終止指定的作業(必須有%)

 

后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系

nohup COMMAND &>/dev/null &

screen;COMMAND

(遠程執行大的任務建議開啟screen或者nohup,以防止斷網引起任務終止)

前后臺作業切換圖示

 

并行任務

方法1

vi all.sh

f1.sh&

f2.sh&

f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&)

方法3

{ f1.sh& f2.sh& f3.sh& }

任務計劃

Centos6查看任務啟動:chkconfig ??–list ?服務名

設置開機啟動:chkconfig ??服務名 ??on

Centos7查看任務啟動:systemctl ?is-enabled ?服務名

設置開機啟動:systemctl ?enable ?服務名

 

與服務器同步時間

Ntpdate ?服務器IP

 

At:適用于一次性任務(ctrl+d 退出任務)

  • At命令依賴于atd服務,需要啟動服務才可以運行
  • 任務執行完成后,任務自動刪除
  • 在任務計劃中,所有標準輸出,默認在屏幕上不輸出
  • 在/var/spool/at目錄下也可以看到at的任務計劃

 

 

-v:顯示版本信息

-l:列出等待運行的計劃作業,相當于atq

-d:刪除指定的作業,相當于atrm

-c:查看具體的作業任務

-f /path/from/somefile :從指定的文件中讀取任務

-m:當任務被完成之后,發送郵件給用戶,一個空郵件

At黑白名單

/etc/at.deny:at任務黑名單,在該名單中的用戶,不允許創建at任務,系統創建

/etc/at.allow:at任務白名單,在該名單中的用戶,允許創建at任務,需要手動創建

如果同一個用戶,同時存在于黑白名單中,那么白名單的優先級高于黑名單,白名單中的用戶生效

如果存在白名單,那么在白名單之外的用戶,將全部被拒絕創建at任務

如果黑白名單文件都不存在,所有用戶全部被拒絕,只用root可以創建

Cron 周期性執行任務計劃

  • 建議將任務計劃放置于/etc/cron.d/下,創建文本,有利于管理
  • /etc/cron.{allow,deny}用法和權限限制都和at 一致

 

 

查看crond運行狀態

Centos7 ?: ?systemctl ?status ?crond

Centos6 ?: ?service ?crond ?status

 

cron日志存放位置: /var/log/cron

 

Cron 任務計劃:系統維護作業

/etc/crontab ??在該文件中定義cron計劃任務

格式:

# Example of job definition:

# .—————- minute (0 – 59)

# | ?.————- hour (0 – 23)

# | ?| ?.———- day of month (1 – 31)

# | ?| ?| ?.——- month (1 – 12) OR jan,feb,mar,apr …

# | ?| ?| ?| ?.—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | ?| ?| ?| ?|

# * ?* ?* ?* ?* user-name ?command to be executed

30 ?2 * ?* ?* ??yan ???backup

每天的2:30 ?yan用戶執行backup任務

注:

  • 每月的幾號和每周的星期幾,是或者的關系,除此之外都是并且的關系
  • 在/etc/crontab中定義任務,用使用命令是,注意有些特殊符號需要轉義

 

用戶cron任務:crontab命令

  • 每個用戶都有專用的cron任務文件:/var/spool/cron/username
  • 用戶創建任務計劃,默認打開的是vi不是vim,需要自己定義,加入命令export ENDTOR=vim

 

 

Crontab命令

Crontab ?-u user ?[ options ]

-l:列出所有任務

-e:編輯任務

-r:移除所有任務

-i:同-r一同使用,以交互式模式移除指定任務(給出提示是否刪除)

-u user :僅root可運行,指定用戶管理cron任務

?

時間表示法:

  • (1) 特定值

給定時間點有效取值范圍內的值

  • (2) *

給定時間點上有效取值范圍內的所有值

表示“每…”

  • (3) 離散取值

#,#,#

  • (4) 連續取值

#-#

  • (5) 在指定時間范圍上,定義步長

/#: #即為步長

 

控制用戶執行計劃任務

/etc/cron.{allow,deny}

 

 

?

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90459

(1)
燕李鵬燕李鵬
上一篇 2017-12-20
下一篇 2017-12-21

相關推薦

  • MairaDB之基于openssl的主從復制

    一、配置openssl   1、   在master server(node0)上根CA的搭建(及生成自簽名證書) [root@node0 ~]# cd /etc/pki/CA/ [root@node0 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) Gen…

    2014-10-03
  • Linux 第六天: (08月03日) 練習和作業

    Linux 第六天: (08月03日) 練習和作業        當用戶xiaoming對/testdir目錄無執行權限時, 無法做哪些操作? 無法 ls -l 無法cd     當用戶xiaoqiang對/testdir目錄無讀權限時, 無法做哪些操作? 無法查看目錄文件列表   &nb…

    Linux干貨 2016-08-08
  • 第六周作業

    1、簡述osi七層模型和TCP/IP五層模型 應用層 運行著應用程序的協議http、ftp、tftp等 表示層 將應用層所編輯的數據進行加密或解密,沒有協議 會話層 決定一次數據傳輸發起和接收會話請求,沒有協議 傳輸層 根據選著的協議類型,決定是否將數據分割或重組,協議:tcp、udp等 網絡層 編輯邏輯地址信息(原站點、目的站點)和路由選著(ARP)協議:…

    2018-02-06
  • 馬哥教育網絡班22期+第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別統計這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash declare -i sum1=0 declare -i sum2=0 shells=$(cat /etc/p…

    Linux干貨 2016-11-28
  • 08.08 筆記總結

    1. 使用sed顯示特定行  sed -n '20p' /etc/passwd  // 顯示/etc/passwd中第20行 命令相當于  cat /etc/passwd | head -20 | tail -1 2. sed -ibak '/^UUID.*/d' /etc/fstab &…

    Linux干貨 2016-08-12
  • 文件管理類命令詳解

    文件管理類命令詳解 文件查看 cat 功能描述:連接文件并打印到標準輸出上 命令格式:cat [OPTION]… [FILE]… OPTION: -b 對所有非空白行編號 -n 給所有輸出行編號 -s 將連續多行空白行顯示為一行空白行 -E 在每一行行尾顯示$ FILE:可顯示多個文件,文件之間以空格分隔 舉例 將file1、file…

    Linux干貨 2017-07-09
欧美性久久久久