本文共 5562 字,大约阅读时间需要 18 分钟。
程序在执行的过程中,会产生一些进程,它是由程序发送指令,然后从硬盘中读取数据,调到内存当中。进程的发起是由三方产生,用户→程序→作用对象。
进程主要分为两类
前台进程:前台进程是由终端发起和控制,也就是说,前台进程需要依靠于这个终端,如果终端关闭,该进程也自动关闭。 后台进程:后台进程一般不会随着终端的管理而关闭,他会在后台自动运行。守护进程也是后台进程,这些进程会随着系统的启动而自动启动,他们作为服务会一直运行,它们不会关闭。
所有的进程都是有init(CentOS6之前,CentOS7是sysetmd)所创建,一切进程都是有他所创建,可以称之为所有进程的"祖先"所有的进程都是通过fork(),clone(),system()所创建,system()函数创建函数方法相对简单,但是安全性不高,而fork()和exec()函数灵活性、速度、以及安全性比较好,所以一般都会使用这两种方法来创建进程。
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值。静态显示当前系统资源使用率的命令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(实时优先级)等等[root@centos6 bin]#ps aux |head -5USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 19236 1500 ? Ss 08:09 0:01 /sbin/initroot 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.00Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombieCpu(s): 0.8%us, 2.2%sy, 0.0%ni, 96.8%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%stMem: 1906256k total, 209412k used, 1696844k free, 11132k buffersSwap: 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命令显示当前系统资源使用情况统计
[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号,直接输入进程名, 只要是该进程名的进程都有效,一般针对于一个名字的好多进程当有一些执行时间比较长的命令,比如需要拷贝一些大文件到别的地方,则该终端将不可以使用,这样就用到了后台运行命令
查看当前终端的作业命令是jobs当执行占用终端时间长的命令时,可以用Ctrl+z暂停并放入后台如下[root@centos6 bin]#ping 127.0.0.1PING 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大致相同不可被调回以上三种方法都可以不依赖于任何终端的执行命令
为提高工作效率,对于一些没有先后顺序的命令,我们可以采用同时运行的方法从而实现提高命令的执行效率
方法一、写脚本,让一个总的脚本调用多个脚本,并且把多个脚本放入后台运行如下所示:同时调用多个脚本并且把多个脚本同时放入后台运行[root@centos6 bin]#cat bingxing.sh #!/bin/bashjiaoben1.sh&jiaoben2.sh&jiaoben3.sh&
方法二、用()来把所有脚本,命令调入后台,多进程执行
[root@centos6 bin]#(jiaoben1.sh&);(jiaoben2.sh&);(jiaoben3.sh&)
方法三、用{}来把所有进程放入后台
[root@centos6 bin]#{jiaoben1.sh& jiaoben2.sh& jiaoben3&}
使系统定期的执行一些操作
at:让系统在未来执行某些任务,比如发个广播选项-l:查看指定队列中等待的计划任务,如果计划任务已经执行将不再显示。-d:删除指定的计划任务-c:查看计划任务的详细信息-f 文件:从指定文件中欧读取任务-m:当计划任务被执行后,将给用户发送邮件,即使咩有标准输出,也会发送一个空邮件给用户[root@centos6 app]#at 15:30 #创建在15点30分是发送一个广播at> wall testat>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/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/01 * * * * root run-parts /etc/cron.hourly~
转载于:https://blog.51cto.com/10492754/2087046