程序在执行的过程当中,会产生一些进程,它是由程序发送指令,而后从硬盘中读取数据,调到内存当中。进程的发起是由三方产生,用户→程序→做用对象。linux
进程主要分为两类
前台进程:前台进程是由终端发起和控制,也就是说,前台进程须要依靠于这个终端,若是终端关闭,该进程也自动关闭。
后台进程:后台进程通常不会随着终端的管理而关闭,他会在后台自动运行。shell
守护进程也是后台进程,这些进程会随着系统的启动而自动启动,他们做为服务会一直运行,它们不会关闭。vim
全部的进程都是有init(CentOS6以前,CentOS7是sysetmd)所建立,一切进程都是有他所建立,能够称之为全部进程的"祖先"全部的进程都是经过fork(),clone(),system()所建立,system()函数建立函数方法相对简单,可是安全性不高,而fork()和exec()函数灵活性、速度、以及安全性比较好,因此通常都会使用这两种方法来建立进程。centos
R:running(运行)
S: interruptable sleeping(可中断睡眠状态)
D: uninterruptable sleeping(不可中断睡眠状态)
T: stopped(中止)
Z: zombie(僵尸)
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者安全
系统优先级:在centos5以前进程优先级0-139,在centos6以后进程优先级0-98。
实时优先级:99-0,值越大,优先级有高,
nice值:-20到19,对应系统优先级100-139或99,通常设置系统优先级都是设置nice值。bash
静态显示当前系统资源使用率的命令ps,ps命令在选项上有三种格式分别是 :UNIX、BSD、GNU,这里主要以BSD选项来讲明
选项
默认显示当前终端中的进程
a:显示都有终端的进程
x:显示全部后台进程
u:显示进程全部者
f:显示进程的父进程
k 属性:针对指定属性进程排序
o 属性1,属性2:显示定制信息,均可以定制:user(执行用户),pid(进程号 )、comm(进程名)、%cp(cpu)u、%mem(内存)、state(状态)、tty(终端)、euser(执行人)、ruser(发起人)、cmd(命令),vsz(承诺内存)rss(实际内存)time(运行时间),ni(nice值),pri(优先级),psr(CPU编号),rtprio(实时优先级)等等session
[root@centos6 bin]#ps aux |head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19236 1500 ? Ss 08:09 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 08:09 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 08:09 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 08:09 0:00 [ksoftirqd/0]
动态显示当前系统使用状况top命令
能够动态的监控系统资源使用状况多线程
top - 10:07:50 up 1:57, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie Cpu(s): 0.8%us, 2.2%sy, 0.0%ni, 96.8%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 1906256k total, 209412k used, 1696844k free, 11132k buffers Swap: 2097148k total, 0k used, 2097148k free, 59652k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19236 1500 1228 S 0.0 0.1 0:01.75 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
dstat命令显示当前系统资源使用状况统计app
[root@centos6 etc]#dstat #默认显示 ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 1 99 0 0 0|2462B 2358B| 0 0 | 0 0 | 33 61 0 0 100 0 0 0| 0 0 |1524B 838B| 0 0 | 21 10 0 0 100 0 0 0| 0 0 |1584B 358B| 0 0 | 33 17 1 0 99 0 0 0| 0 0 |1704B 358B| 0 0 | 22 10 0 1 99 0 0 0| 0 0 |1796B 358B| 0 0 | 29 14 0 0 100 0 0 0| 0 0 |1856B 358B| 0 0 | 29 14 1 1 98 0 0 0| 0 156k|1856B 358B| 0 0 | 50 25
kill命令是想进城发送控制信号,进程根据信号来判断动做。
经常使用选项
-0:无做为,通常对于测试某进程是否开启
-1:强制性的让进程从新读取配置文件
-2:终止正在运行的进程,至关于Ctrl+c
-3:至关于ctrl+\
-9:强制杀死正在运行的进程
-15:终止正在运行的进程
-18:继续运行被暂定的进程
-19:把前台的进程调到后台休眠
跟kill做用相同的还有killall命令,该命令能够不输入PID号,直接输入进程名, 只要是该进程名的进程都有效,通常针对于一个名字的好多进程ide
当有一些执行时间比较长的命令,好比须要拷贝一些大文件到别的地方,则该终端将不可使用,这样就用到了后台运行命令
查看当前终端的做业命令是jobs
当执行占用终端时间长的命令时,能够用Ctrl+z暂停并放入后台以下
[root@centos6 bin]#ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.020 ms ^Z [1]+ Stopped ping 127.0.0.1
可是终端是释放了,可是命令也跟着暂停了,那么就可使用bg来放入后台继续运行,若是想要把后台的程序从新调到前台则可使用fg。
根据上述描述,命令占用终端是解决的了,可是这些命令仍是基于当前终端来运行的, 若是将当前终端关闭,那么对于当前终端所执行的全部命令也将被终端,那么仍是不够完美。
想要把运行命令改变成不终端的方法有三种
方法一:nohup 命令 &>/dev/null
方法二:在终端中输入screen,会进入一个新的shell,这个shell不基于任何bash,就算终端关闭 ,在该终端中的全部操做也不会被关闭,该命令的优势还有若是有须要从新调回命令,还能够从新链接,根据screen -ls 查看会话screen -x 会话名从新链接
方法三:(命令) 该方法跟nohup大体相同不可被调回
以上三种方法均可以不依赖于任何终端的执行命令
为提升工做效率,对于一些没有前后顺序的命令,咱们能够采用同时运行的方法从而实现提升命令的执行效率
方法1、写脚本,让一个总的脚本调用多个脚本,而且把多个脚本放入后台运行
以下所示:同时调用多个脚本而且把多个脚本同时放入后台运行
[root@centos6 bin]#cat bingxing.sh #!/bin/bash jiaoben1.sh& jiaoben2.sh& jiaoben3.sh&
方法2、用()来把全部脚本,命令调入后台,多进程执行
[root@centos6 bin]#(jiaoben1.sh&);(jiaoben2.sh&);(jiaoben3.sh&)
方法3、用{}来把全部进程放入后台
[root@centos6 bin]#{jiaoben1.sh& jiaoben2.sh& jiaoben3&}
使系统按期的执行一些操做
at:让系统在将来执行某些任务,好比发个广播
选项
-l:查看指定队列中等待的计划任务,若是计划任务已经执行将再也不显示。
-d:删除指定的计划任务
-c:查看计划任务的详细信息
-f 文件:从指定文件中欧读取任务
-m:当计划任务被执行后,将给用户发送邮件,即便咩有标准输出,也会发送一个空邮件给用户
[root@centos6 app]#at 15:30 #建立在15点30分是发送一个广播 at> wall test at> <EOT> job 8 at 2018-03-18 15:30 [root@centos6 app]#at -l #查看计划任务 8 2018-03-18 15:30 a root
crontab:让系统在规定的时间循环执行某些操做
系统级计划任务,直接编辑配置文件,文件格式以下。
[root@centos6 app]#vim /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 # | | | | | # * * * * * user-name command to be executed 分钟 小时 日 月 星期 用户 操做 #计划任务分为这几列
注:当计划任务的服务没有启用,计划任务将再也不执行。
建立用户级计划任务
[root@centos6 app]#crontab -e #默认那个用户编辑,将是哪个用户的计划任务 00 8 * * * /testdir/1.sh #在天天的8点执行指定的脚本,格式同上一一致
还能够指定在哪个时刻指定某目录下的全部计划任务
[root@centos6 etc]#vim /etc/cron.d/0hourly #能够在该文件下指定时间而且指定须要指定脚本的目录run-parts是一个命令, HELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 01 * * * * root run-parts /etc/cron.hourly ~