redhat进阶之路:linux进程管理1

来源:互联网 发布:淘宝的香港通利琴行 编辑:程序博客网 时间:2024/06/07 15:32

操作系统进程的概念:
计算机操作系统实质上就是一系列运行在内核和内核上的进程所组成,操作系统的各项功能也是由操作系统来组成的,内核进程和普通用户进程的区别就在于二者的运行空间不同:
内核进程:运行在内核空间
用户进程:运行在用防护空间
进程运行时会所需的数据和指令调入内存,此后,指令装入cpu寄存器,由cpu根据指令调用内存中的数据进行操作。在这操作的过程中,如果发现需要对硬件进行操作,则会向内核提出申请(进程通过系统调用【syscall】向内核发起申请),进入内核模式,因为只有内核能操作硬件。
内核接受这个请求之后便会转入内核模式,对应进程的指令此时就从cpu中退出执行,内核为其保留了状态信息(进程id,进程名称,执行到指令步骤),完成硬件操作之后,由内核模式退出至用户模式继续执行进程剩余指令,最终向用户返回执行结果。

同时每个进程还有对应的cpu时间,当cpu时间耗尽时也会退出cpu执行,并保存现场,装载其他的指令执行,待轮到这个指令执行的时候回复现场,接着上次执行的位置开始。

进程自己执行的时候是在内存中的,进程的描述信息放在内核中,内核为每个进程维护这一个内核数据结构(task structure)该数据结构保存了进程的相关信息,如:进程父id,进程id,进程名称,执行到那条指令,使用内存信息等。

进程具体执行的时候,内核会通过“任务结构:task structure”保存的状态信息到内存中找到相应的指令(即上次保存现场退出后最后执行的指令 )载入到cpu重新开始执行,这过程也叫恢复现场

只有当进程运行完毕以后,才会释放对应的内存空间,内核维护的任务结构才会销毁。

进程状态:

Sopped:处于停止状态的进程Ready:就绪,轮到该进程的时候能马上到CPU上运行Executing:运行中的进程
Uninterruptible:不可中断的睡眠状态。如一个正在运行的进程,需要打开一个文件,此时会产生磁盘的IO请求,由于磁盘的IO速度较慢,此时进程会交出CPU,进入到睡眠状态,一直等到文件打开完毕后,才会重新唤醒该进程,调度到CPU上继续运行。若所需文件未打开,即使是手动调度到CPU上,该进程也不会运行。所以这种睡眠称为不可中断Interruptible:可中断的睡眠状态。进程由于空闲而进入睡眠状态,如数据库进程,当执行完一个用户的请求后,该进程处于空闲状态,但数据库进程又不能退出(数据库进程以守护进程的模式运行)需要等待其他用户的请求到达,从而进入睡眠状态,当其他用户的请求到达时被重新唤醒调度到CPU上运行,这种睡眠称为可中断睡眠Zombie:僵尸进程,进程运行完毕之后内存空间并没有释放,并且已经弄不清到底占据了哪些内存空间。会造成内存泄露

在linux中,所有的进程都是init的子进程,而init进程是由内核负责生成,其他的所有进程都是由init负责生成

linux进程树查看:
pstree:

[root@localhost 桌面]# pstreesystemd─┬─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运行时间,更优先的运行机会。

  1. 进程的NICE值(调节进程的nice值来调整进程的优先级)
    NICE值:-20-19来对应100-139,NICE值越小优先级越高普通用户只能调大自己进程的NICE值,即调低进程的优先级,root用户可以随意调整每个进程都有一个PID,process id ,进程ID每个进程的相关信息都保存在/proc目录,在这个目录下会有一个与进程id相同的目录,用来保存这个进程的相关信息:[root@localhost 桌面]# ls -l /proc/总用量 0dr-xr-xr-x.  9 root           root                         0 520 11:30 1dr-xr-xr-x.  9 root           root                         0 520 11:30 10dr-xr-xr-x.  9 root           root                         0 520 11:30 100dr-xr-xr-x.  9 root           root                         0 520 11:31 1000dr-xr-xr-x.  9 root           root                         0 520 11:31 1001dr-xr-xr-x.  9 rtkit          rtkit                        0 520 11:31 1003dr-xr-xr-x.  9 root           root                         0 520 11:31 1006dr-xr-xr-x.  9 root           root                         0 520 11:30 101dr-xr-xr-x.  9 root           root                         0 520 11:31 1011dr-xr-xr-x.  9 avahi          avahi                        0 520 11:31 1013dr-xr-xr-x.  9 root           root                         0 520 11:31 1015dr-xr-xr-x.  9 root           root                         0 520 11:31 1016dr-xr-xr-x.  9 dbus           dbus                         0 520 11:31 1017dr-xr-xr-x.  9 root           root                         0 520 11:30 102dr-xr-xr-x.  9 root           root                         0 520 11:30 103dr-xr-xr-x.  9 avahi          avahi                        0 520 11:32 1032dr-xr-xr-x.  9 root           root                         0 520 11:30 104dr-xr-xr-x.  9 root           root                         0 520 11:30 105dr-xr-xr-x.  9 root           root                         0 520 11:31 1057dr-xr-xr-x.  9 root           root                         0 520 11:31 1058dr-xr-xr-x.  9 root           root                         0 520 11:30 106dr-xr-xr-x.  9 root           root                         0 520 11:31 1067dr-xr-xr-x.  9 polkitd        polkitd                      0 520 11:31 1069dr-xr-xr-x.  9 root           root                         0 520 11:30 107dr-xr-xr-x.  9 root           root                         0 520 11:30 108dr-xr-xr-x.  9 root           root                         0 520 11:30 109dr-xr-xr-x.  9 root           root                         0 520 11:30 11dr-xr-xr-x.  9 root           root                         0 520 11:30 110dr-xr-xr-x.  9 root           root                         0 520 11:30 111dr-xr-xr-x.  9 root           root                         0 520 11:30 112dr-xr-xr-x.  9 root           root                         0 520 11:30 113......

进入上述的目录之一:

[root@localhost 桌面]# ls /proc/1270attr       clear_refs       cpuset   fd       limits     mem         net        oom_score      projid_map  setgroups  statm    timersautogroup  cmdline          cwd      fdinfo   loginuid   mountinfo   ns         oom_score_adj  root        smaps      status   uid_mapauxv       comm             environ  gid_map  map_files  mounts      numa_maps  pagemap        sched       stack      syscall  wchancgroup     coredump_filter  exe      io       maps       mountstats  oom_adj    personality    sessionid   stat       task

需要注意的是这个目录中的信息并不是实际存在于磁盘上的信息,他们是内核信息的映射,相当于一种状态信息。

2.内存相关信息

保存于/proc/meminfo[root@localhost 桌面]# cat /proc/meminfo MemTotal:        1868660 kBMemFree:          716996 kBMemAvailable:    1044368 kBBuffers:            1304 kBCached:           423836 kBSwapCached:            0 kBActive:           475076 kBInactive:         309012 kBActive(anon):     359780 kBInactive(anon):     9888 kBActive(file):     115296 kBInactive(file):   299124 kBUnevictable:           0 kBMlocked:               0 kBSwapTotal:       2097148 kBSwapFree:        2097148 kBDirty:                 0 kBWriteback:             0 kBAnonPages:        358968 kBMapped:           108548 kBShmem:             10720 kBSlab:             106844 kBSReclaimable:      51152 kBSUnreclaim:        55692 kBKernelStack:       12416 kBPageTables:        23972 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:     3031476 kBCommitted_AS:    2364568 kBVmallocTotal:   34359738367 kBVmallocUsed:      173160 kBVmallocChunk:   34359561060 kBHardwareCorrupted:     0 kBAnonHugePages:    110592 kBHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:      104320 kBDirectMap2M:     1992704 kBDirectMap1G:           0 kB

3.cpu信息

保存于/proc/cpuinfo[root@localhost 桌面]# cat /proc/cpuinfo processor   : 0vendor_id   : GenuineIntelcpu family  : 6model       : 60model name  : Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHzstepping    : 3microcode   : 0x1ecpu MHz     : 2401.000cache size  : 6144 KBphysical id : 0siblings    : 1core id     : 0cpu cores   : 1apicid      : 0initial apicid  : 0fpu     : yesfpu_exception   : yescpuid level : 13wp      : yesflags       : 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 xsaveoptbogomips    : 4802.00clflush size    : 64cache_alignment : 64address sizes   : 42 bits physical, 48 bits virtualpower management:
0 0