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运行时间,更优先的运行机会。
- 进程的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 5月 20 11:30 1dr-xr-xr-x. 9 root root 0 5月 20 11:30 10dr-xr-xr-x. 9 root root 0 5月 20 11:30 100dr-xr-xr-x. 9 root root 0 5月 20 11:31 1000dr-xr-xr-x. 9 root root 0 5月 20 11:31 1001dr-xr-xr-x. 9 rtkit rtkit 0 5月 20 11:31 1003dr-xr-xr-x. 9 root root 0 5月 20 11:31 1006dr-xr-xr-x. 9 root root 0 5月 20 11:30 101dr-xr-xr-x. 9 root root 0 5月 20 11:31 1011dr-xr-xr-x. 9 avahi avahi 0 5月 20 11:31 1013dr-xr-xr-x. 9 root root 0 5月 20 11:31 1015dr-xr-xr-x. 9 root root 0 5月 20 11:31 1016dr-xr-xr-x. 9 dbus dbus 0 5月 20 11:31 1017dr-xr-xr-x. 9 root root 0 5月 20 11:30 102dr-xr-xr-x. 9 root root 0 5月 20 11:30 103dr-xr-xr-x. 9 avahi avahi 0 5月 20 11:32 1032dr-xr-xr-x. 9 root root 0 5月 20 11:30 104dr-xr-xr-x. 9 root root 0 5月 20 11:30 105dr-xr-xr-x. 9 root root 0 5月 20 11:31 1057dr-xr-xr-x. 9 root root 0 5月 20 11:31 1058dr-xr-xr-x. 9 root root 0 5月 20 11:30 106dr-xr-xr-x. 9 root root 0 5月 20 11:31 1067dr-xr-xr-x. 9 polkitd polkitd 0 5月 20 11:31 1069dr-xr-xr-x. 9 root root 0 5月 20 11:30 107dr-xr-xr-x. 9 root root 0 5月 20 11:30 108dr-xr-xr-x. 9 root root 0 5月 20 11:30 109dr-xr-xr-x. 9 root root 0 5月 20 11:30 11dr-xr-xr-x. 9 root root 0 5月 20 11:30 110dr-xr-xr-x. 9 root root 0 5月 20 11:30 111dr-xr-xr-x. 9 root root 0 5月 20 11:30 112dr-xr-xr-x. 9 root root 0 5月 20 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:
- redhat进阶之路:linux进程管理1
- Linux(RedHat)学习之路6.0之逻辑卷管理
- linux之进程管理
- linux之进程管理
- Linux之进程管理
- Linux之进程管理
- Linux之rpm软件包管理(redhat)
- Linux之redhat管理虚拟机的常用命令
- Redhat Linux 守护进程列表(1)
- Linux内核之进程管理
- Linux内核之进程管理
- linux之进程管理详解
- Linux学习之进程管理
- Linux 进程管理之四大名捕
- Linux进程管理之task_struct
- Linux内核之进程管理
- Linux之简单进程管理
- Linux进程之管理控制
- (STL)map的常用指令
- 配置Java环境的大坑,如果你被折磨了好久进来看看吧
- js中json操作——函数构造法、eval、JSON.stringify、JSON.parse
- Elisp 入门笔记(2)
- SQL SERVER 表和字段的创建、删除
- redhat进阶之路:linux进程管理1
- 欢迎使用CSDN-markdown编辑器
- UVa12096 The SetStack Computer (stack)
- 青蛙跳台阶问题
- Nginx学习笔记一环境配置
- str的format原来是这样用的
- Docker & Dubbo:Dubbo提供者部署到Docker容器
- Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE tha
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile