进程--计划任务
进程:动态存储在内存中的一段代码
[sb@localhost etc]$ cd /
[sb@localhost /]$ ls
a1 a3 boot dev home lost+found misc net proc sbin srv tmp var
a2 bin cgroup etc lib media mnt opt root selinux sys usr
proc和sys并没有加载在硬盘上,而是加载在内存里,以文件系统的形式表现,所以是伪文件系统。
在内存中的东西,本身文件夹中没有任何东西。(第一行数字为PID号)
[sb@localhost /]$ cd proc/
[sb@localhost proc]$ ls
1 1751 22 2479 2821 311 5800 dma net
10 1760 2250 2489 2822 312 5913 driver pagetypeinfo
1014 1761 2256 2490 2844 313 5914 execdomains partitions
1018 18 2297 2491 2865 314 6 fb sched_debug
11 1804 23 2492 2866 315 6101 filesystems schedstat
12 1807 2308 25 2871 316 6102 fs scsi
13 1824 2312 2509 2873 317 6528 interrupts self
1342 1847 2337 253 2876 318 6529 iomem slabinfo
1376 19 2346 2542 2896 319 6600 ioports softirqs
14 1914 2355 2543 2899 320 67 irq stat
15 2 2356 2544 29 321 6742 kallsyms swaps
1537 20 2416 2546 2900 322 7 kcore sys
1562 2090 2420 2547 2901 323 777 keys sysrq-trigger
16 2097 2427 2550 298 324 8 key-users sysvipc
1607 21 2432 2552 299 325 9 kmsg timer_list
1619 2101 2436 257 3 326 965 kpagecount timer_stats
1628 2109 2445 2583 300 327 966 kpageflags tty
1639 2120 2453 26 301 34 acpi loadavg uptime
1644 2133 2455 266 302 36 asound locks version
1653 2138 2457 267 303 37 buddyinfo mdstat vmallocinfo
1654 2140 2467 268 304 4 bus meminfo vmstat
1655 2142 2468 27 305 475 cgroups misc zoneinfo
1672 2146 2470 2746 306 482 cmdline modules
17 2148 2472 2760 307 494 cpuinfo mounts
1709 2163 2474 2782 308 495 crypto mpt
1716 2165 2475 2786 309 5 devices mtd
1726 2180 2477 28 310 578 diskstats mtrr
进程:
内存存储空间分成两大部分:内核空间(swap空间),用户空间(物理内存)
进程在内存中有常驻内存和虚拟内存
如果kill 1672,结束进程,文件夹也会消失
[sb@localhost proc]$ cd /boot/
[sb@localhost boot]$ ls
config-2.6.32-71.el6.i686 lost+found
efi symvers-2.6.32-71.el6.i686.gz
grub System.map-2.6.32-71.el6.i686
initramfs-2.6.32-71.el6.i686.img vmlinuz-2.6.32-71.el6.i686
每次开机post→检测
CPU→RAM(内存)→MBR(容器)→硬盘
当开机时init进程号为1,是第一个进程,负责将系统在内存加载完整,并将数据存储在硬盘上。
user 用户
share 共享内存,可以中断
swap
ksp 内核,支撑操作系统的运行,不能关掉。
房屋承重墙,必须存在→内核
房屋公摊 →共享内存
共享内存:
申请QQ,每人申请一次,QQ服务器则要启动一次,但是很累,所以启动共享内存,可以中断。
例:打开百度,出门,没人动,回来百度可以照样使。是谁来记录并保存这个进程的状态?
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。(源码中)
task_struct:进程描述符,来保存、记录进程运行的状态。
task_struct所管理内容:和命令相关的应用程序(硬盘)
PID(内存/var/run)
进程运行状态(继续而不会重新开始)
进程的生命周期等(写软件能写好的)10项。
例:QQ聊天、输入法(子进程)
QQ fork执行
exec(函数)
复制、分叉 exit
占用QQ的空间 wait等待
“僵尸进程”关闭不了就要关闭“父进程”。
CPU:一次只能处理一个进程,每个进程根据优先级轮回交替运行,记录进程运行状态。
进程优先级:比较多的分配CPU使用时间,优先执行,linux进程优先级是0-139,其中0-99是内核控制,100-139用户可控,数越小优先级越高。
管理员可以手动调整40个(-20到19),普通用户可以手动调整20个(0到19)。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2165 root 20 0 64028 20m 7308 S 2.3 1.0 0:20.41 Xorg
2899 root 20 0 91956 14m 11m S 0.3 0.7 0:04.03 gnome-terminal
1 root 20 0 2828 1388 1192 S 0.0 0.1 0:01.31 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
PR+NI=数字(越小优先级越高)。
通过renice调整
renice -5 PID
优先级高的进程:第一,CPU优先执行
第二,执行时间变长
进程分类:和终端有关的进程,和终端无关的进程。
ps:process status(静态进程状态):BSD风格(不使用连字符),unix风格(使用连字符),GNU长选项(使用两个连字符)
a:显示和终端有关的进程
u:显示进程用户的信息
x:显示和终端无关的进程
-e:显示所有进程信息
-l:显示进程长格式
-F:显示进程的完整信息
[root@localhost boot]# ps aux |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2828 1388 ? Ss 19:45 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 19:45 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 19:45 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 19:45 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 19:45 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S 19:45 0:00 [events/0]
root 7 0.0 0.0 0 0 ? S 19:45 0:00 [cpuset]
root 8 0.0 0.0 0 0 ? S 19:45 0:00 [khelper]
root 9 0.0 0.0 0 0 ? S 19:45 0:00 [netns]
1)、use用户:为什么用户不一样,在Linux中,小于1024的端口必须由root管理员的应用程序,称为master process(管理进程),由各自用户(如httpd专门管理用户apache)管理的进程称为worker process(工作进程)。
5)、VSZ:虚拟共享内存
8)、STAT:状态
S:休眠 R:运行 s:(session)领导者:父进程 z:僵尸进程(关闭了进程,并没有释放内存,如果是init必须中期才能结束)
pstree:显示进程树
top:动态查看系统进程信息,每隔3刷新一次
t:显示任务cpu信息的开关
m:显示内存信息的开关
f:进入top交互屏幕,添加删除所显示的列
o:进入top交互屏幕,配置top列显示的顺序
r:使用renice修改某个进程的优先级
k:杀死一个进程
h:显示top热键的帮助信息
进程都有PID号,进程相关PID信息文件保存在/proc下,以
进程的PID命名的文件夹,保存运行该进程所使用或调用的
文件
top信息:PR(primary)内核决定的优先级,0-99
NI(nice):用户可控优先级,-20到19,普通用户只能提高优先级的值,管理员能够随意调整
[root@localhost boot]# top
top - 22:42:34 up 2:56, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 181 total, 1 running, 180 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.0%us, 0.3%sy, 0.0%ni, 96.7%id, 0.7%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 2071700k total, 661860k used, 1409840k free, 85212k buffers
Swap: 4161528k total, 0k used, 4161528k free, 312140k cached
load average: 0.00, 0.00, 0.00
每隔1、5、15分钟(过去的时间)的负载(1到1.5不可超过)→升级电脑(硬件和并发数)
uptime可以查看过去的负载
*us *sy *ni *id *wa *hi *si *st
用户 系统 nice值 空闲 等待I/O 硬件 软件 被hypervisor偷走
nice:进过调整优先级的进程使用CPU的百分比
wa:等待调用CPU百分比
st:虚拟化的东西
buffers:缓冲区(共享内存)
cached:缓存
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
time:占用CPU总时间,加起来的和(进程让谁用了多久加起来)
command:进程名字。
进程状态:
D:不可中断睡眠状态
S:可中断睡眠状态
R:运行状态
T:停止状态
Z:僵尸状态
s:session leader
<:优先级较高的进程(用户不可控)
N:优先级较低的进程(用户可控进程)
l:多线程进程
L:在内存中锁定分页
+:前台进程组中的进程
pgrep:查看进程PID相关信息
[root@localhost boot]# pgrep -l "sshd"
1847 sshd
[root@localhost boot]# pgrep -l "log"
1562 rsyslogd
kill:(结束进程)
kill: -9(强制终止进程)
killall:结束进程树,用户kill一样
pkill:根据条件结束进程,-U指定用户 -t指定终端
[root@localhost boot]# man kill
1、正常关闭
2、强制正常关闭
9、强制结束(不要轻易用,当我们结束一个进程可能牵扯很多东西,不如重启)
进程启动方式:
手工启动(前台启动/后台启动)
任务计划:atd(一次性) crond(周期性任务计划)
ctrl+Z:把前台任务暂停放入后台
jobs:查看后台任务列表
fg:把后台任务调入前台并恢复运行
fg:后台→前台→重启
bg:后台→启用
[root@www 桌面]# cp /boot/* /tmp/ &
[1] 2922
[root@www 桌面]# jobs
[1]+ Stopped cp -i /boot/* /tmp/
[root@www 桌面]# fg 1
cp -i /boot/* /tmp/
^C
查看系统中所开启服务:netstat
-a:显示系统中所有运行的服务
-n:以数字形式显示
-p:显示服务PID号
-t:显示tcp协议
-u:显示udp协议
超级服务:xinetd(依存关系),不需要启动服务本身
[root@localhost boot]# service crond restart (周期性)
[root@localhost boot]# service atd restart (一次性)
[root@localhost boot]# service xinetd restart
任务计划:
at:一次性任务计划,由/etc/init.d/atd执行(或/etc/rc.d/init.d)
守护进程atd,支撑进程。
[root@localhost ~]# ps aux | grep atd
rpcuser 1672 0.0 0.0 2584 1092 ? Ss 19:46 0:00 rpc.statd
root 2120 0.0 0.0 2828 332 ? Ss 19:46 0:00 /usr/sbin/atd
root 7624 0.0 0.0 5940 768 pts/0 S+ 23:19 0:00 grep atd
[root@localhost ~]# ps aux | grep stop
root 7631 0.0 0.0 5936 744 pts/0 S+ 23:19 0:00 grep stop
atq或者at -l:查看at任务列表
atrm:删除at任务
进程状态:
睡眠状态:不可中断睡眠状态,可中断睡眠状态
僵尸状态:进程已经运行完成,但是还在占用内存空间
crond:周期性任务(守护进程crond)
命令字必须使用绝对路径,普通用户可能执行不了。
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
For details see man 4 crontabs
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
| | | | |
* * * * * command to be executed
时间点:分钟 小时 日期 月份 星期 (分、时、日、月、周)
-e:编辑计划任务
-l:查看计划任务
-r:删除计划任务