歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> redhat進階之路:linux進程管理1

redhat進階之路:linux進程管理1

日期:2017/3/3 12:51:16   编辑:Linux技術

操作系統進程的概念:

計算機操作系統實質上就是一系列運行在內核和內核上的進程所組成,操作系統的各項功能也是由操作系統來組成的,內核進程和普通用戶進程的區別就在於二者的運行空間不同:

內核進程:運行在內核空間

用戶進程:運行在用防護空間

進程運行時會所需的數據和指令調入內存,此後,指令裝入cpu寄存器,由cpu根據指令調用內存中的數據進行操作。在這操作的過程中,如果發現需要對硬件進行操作,則會向內核提出申請(進程通過系統調用【syscall】向內核發起申請),進入內核模式,因為只有內核能操作硬件。 內核接受這個請求之後便會轉入內核模式,對應進程的指令此時就從cpu中退出執行,內核為其保留了狀態信息(進程id,進程名稱,執行到指令步驟),完成硬件操作之後,由內核模式退出至用戶模式繼續執行進程剩余指令,最終向用戶返回執行結果。

同時每個進程還有對應的cpu時間,當cpu時間耗盡時也會退出cpu執行,並保存現場,裝載其他的指令執行,待輪到這個指令執行的時候回復現場,接著上次執行的位置開始。

進程自己執行的時候是在內存中的,進程的描述信息放在內核中,內核為每個進程維護這一個內核數據結構(task structure)該數據結構保存了進程的相關信息,如:進程父id,進程id,進程名稱,執行到那條指令,使用內存信息等。進程具體執行的時候,內核會通過“任務結構:task structure”保存的狀態信息到內存中找到相應的指令(即上次保存現場退出後最後執行的指令 )載入到cpu重新開始執行,這過程也叫恢復現場

只有當進程運行完畢以後,才會釋放對應的內存空間,內核維護的任務結構才會銷毀。

進程狀態:

[code]Sopped:處於停止狀態的進程
Ready:就緒,輪到該進程的時候能馬上到CPU上運行
Executing:運行中的進程
[code]Uninterruptible:不可中斷的睡眠狀態。如一個正在運行的進程,需要打開一個文件,此時會產生磁盤的IO請求,由於磁盤的IO速度較慢,此時進程會交出CPU,進入到睡眠狀態,一直等到文件打開完畢後,才會重新喚醒該進程,調度到CPU上繼續運行。若所需文件未打開,即使是手動調度到CPU上,該進程也不會運行。所以這種睡眠稱為不可中斷

Interruptible:可中斷的睡眠狀態。進程由於空閒而進入睡眠狀態,如數據庫進程,當執行完一個用戶的請求後,該進程處於空閒狀態,但數據庫進程又不能退出(數據庫進程以守護進程的模式運行)需要等待其他用戶的請求到達,從而進入睡眠狀態,當其他用戶的請求到達時被重新喚醒調度到CPU上運行,這種睡眠稱為可中斷睡眠

Zombie:僵屍進程,進程運行完畢之後內存空間並沒有釋放,並且已經弄不清到底占據了哪些內存空間。會造成內存洩露

在linux中,所有的進程都是init的子進程,而init進程是由內核負責生成,其他的所有進程都是由init負責生成

linux進程樹查看:

pstree:

[code][root@localhost 桌面]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─abrt-dbus───2*[{abrt-dbus}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───{at-spi2-registr}
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─caribou───2*[{caribou}]
        ├─chronyd
        ├─colord───2*[{colord}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon───{dbus-daemon}]
        ├─dbus-launch
        ├─dnsmasq───dnsmasq
        ├─evolution-calen───6*[{evolution-calen}]
        ├─evolution-sourc───2*[{evolution-sourc}]
        ├─firewalld───{firewalld}
        ├─gconfd-2
        ├─gdm─┬─Xorg
        │     ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet───{abrt-applet}
        │     │                 │               ├─gnome-settings-───4*[{gnome-settings-}]
        │     │                 │               ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
        │     │                 │               │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
        │     │                 │               │             │             └─2*[{ibus-daemon}]
        │     │                 │               │             └─7*[{gnome-shell}]
        │     │                 │               ├─gnome-software───3*[{gnome-software}]
        │     │                 │               ├─nautilus───4*[{nautilus}]
        │     │                 │               ├─rhsm-icon───{rhsm-icon}
        │     │                 │               ├─seapplet
        │     │                 │               ├─ssh-agent
        │     │                 │               ├─tracker-extract───13*[{tracker-extract}]
        │     │                 │               ├─tracker-miner-a───{tracker-miner-a}
        │     │                 │               ├─tracker-miner-f───3*[{tracker-miner-f}]
        │     │                 │               ├─tracker-miner-u───{tracker-miner-u}
        │     │                 │               └─3*[{gnome-session}]
        │     │                 └─2*[{gdm-session-wor}]
        │     └─3*[{gdm}]
        ├─gnome-keyring-d───4*[{gnome-keyring-d}]
        ├─gnome-shell-cal───4*[{gnome-shell-cal}]
        ├─gnome-terminal-─┬─bash───pstree
        │                 ├─gnome-pty-helpe
        │                 └─3*[{gnome-terminal-}]
        ├─goa-daemon───3*[{goa-daemon}]
        ├─goa-identity-se───2*[{goa-identity-se}]
        ├─gsd-printer───{gsd-printer}
        ├─gssproxy───5*[{gssproxy}]
        ├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
        ├─gvfs-goa-volume───{gvfs-goa-volume}
        ├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
        ├─gvfs-mtp-volume───{gvfs-mtp-volume}
        ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
        ├─gvfsd───{gvfsd}
        ├─gvfsd-fuse───4*[{gvfsd-fuse}]
        ├─gvfsd-trash───2*[{gvfsd-trash}]
        ├─ibus-x11───2*[{ibus-x11}]
        ├─ksmtuned───sleep
        ├─libvirtd───15*[{libvirtd}]
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─mission-control───2*[{mission-control}]
        ├─packagekitd───2*[{packagekitd}]
        ├─polkitd───5*[{polkitd}]
        ├─pulseaudio───2*[{pulseaudio}]
        ├─rhnsd
        ├─rhsmcertd
        ├─rngd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd
        ├─systemd-hostnam
        ├─systemd-journal
        ├─systemd-localed
        ├─systemd-logind
        ├─systemd-udevd
        ├─tracker-store───7*[{tracker-store}]
        ├─tuned───4*[{tuned}]
        ├─udisksd───4*[{udisksd}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        ├─vmtoolsd
        └─wpa_supplicant

從上面的進程樹中可以看出,進程之間是有主從關系的
linux進程是有優先級的,優先級的取值范圍是0-139,數字越小優先級越高,140個優先級之中,用戶可控的是100-139,而從0-99是內核調整操控的,高的優先級進程可以獲得更多的cpu運行時間,更優先的運行機會。

進程的NICE值(調節進程的nice值來調整進程的優先級)

[code]    NICE值:-20-19來對應100-139,NICE值越小優先級越高
普通用戶只能調大自己進程的NICE值,即調低進程的優先級,root用戶可以隨意調整
每個進程都有一個PID,process id ,進程ID

每個進程的相關信息都保存在/proc目錄,在這個目錄下會有一個與進程id相同的目錄,用來保存這個進程的相關信息:

[root@localhost 桌面]# ls -l /proc/
總用量 0
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 1
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 10
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 100
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1000
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1001
dr-xr-xr-x.  9 rtkit          rtkit                        0 5月  20 11:31 1003
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1006
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 101
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1011
dr-xr-xr-x.  9 avahi          avahi                        0 5月  20 11:31 1013
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1015
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1016
dr-xr-xr-x.  9 dbus           dbus                         0 5月  20 11:31 1017
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 102
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 103
dr-xr-xr-x.  9 avahi          avahi                        0 5月  20 11:32 1032
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 104
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 105
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1057
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1058
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 106
dr-xr-xr-x.  9 root           root                         0 5月  20 11:31 1067
dr-xr-xr-x.  9 polkitd        polkitd                      0 5月  20 11:31 1069
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 107
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 108
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 109
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 11
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 110
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 111
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 112
dr-xr-xr-x.  9 root           root                         0 5月  20 11:30 113
......
進入上述的目錄之一:

[code][root@localhost 桌面]# ls /proc/1270
attr       clear_refs       cpuset   fd       limits     mem         net        oom_score      projid_map  setgroups  statm    timers
autogroup  cmdline          cwd      fdinfo   loginuid   mountinfo   ns         oom_score_adj  root        smaps      status   uid_map
auxv       comm             environ  gid_map  map_files  mounts      numa_maps  pagemap        sched       stack      syscall  wchan
cgroup     coredump_filter  exe      io       maps       mountstats  oom_adj    personality    sessionid   stat       task
需要注意的是這個目錄中的信息並不是實際存在於磁盤上的信息,他們是內核信息的映射,相當於一種狀態信息。

2.內存相關信息

[code]保存於/proc/meminfo

[root@localhost 桌面]# cat /proc/meminfo 
MemTotal:        1868660 kB
MemFree:          716996 kB
MemAvailable:    1044368 kB
Buffers:            1304 kB
Cached:           423836 kB
SwapCached:            0 kB
Active:           475076 kB
Inactive:         309012 kB
Active(anon):     359780 kB
Inactive(anon):     9888 kB
Active(file):     115296 kB
Inactive(file):   299124 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        358968 kB
Mapped:           108548 kB
Shmem:             10720 kB
Slab:             106844 kB
SReclaimable:      51152 kB
SUnreclaim:        55692 kB
KernelStack:       12416 kB
PageTables:        23972 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3031476 kB
Committed_AS:    2364568 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      173160 kB
VmallocChunk:   34359561060 kB
HardwareCorrupted:     0 kB
AnonHugePages:    110592 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      104320 kB
DirectMap2M:     1992704 kB
DirectMap1G:           0 kB
3.cpu信息

[code]保存於/proc/cpuinfo
[root@localhost 桌面]# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
stepping    : 3
microcode   : 0x1e
cpu MHz     : 2401.000
cache size  : 6144 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ida arat epb pln pts dtherm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt
bogomips    : 4802.00
clflush size    : 64
cache_alignment : 64
address sizes   : 42 bits physical, 48 bits virtual
power management:

Copyright © Linux教程網 All Rights Reserved