如何管理Linux系统的进程与计划任务
1.什么是进程?
什么是进程?
进程是一系列执行运行在内存中
。使用数字进程ID(PID)来区分
。UID,GID和SELinux上下文决定了文件系统的访问
。通常从执行的用户中继承
列举进程:
通过ps查看进程信息
。-a 包括所有的终止进程
。-x 包括没有关联到终端的进程
。-u 打印进程所有者信息
。-f 打印父子进程信息
。-o PROPERTY,...打印自定义的信息:
.pid,comm,%cpu,%mem,state,tty,euser,ruser
ps默认情况下显示当前用户的信息
管道也是一个进程
2.ps命令自定义显示信息
#ps aux | head -n1 //查询进程标题头 实现只想查看内存,comm,user,pid等信息的命令,然后按照降序排序,取内存消耗最大的前5个进程 #ps axo "%mem,comm,user,pid" | sort -nr |head -n5 #pstree //查看父子进程(如果父进程消亡,子进程也会消亡) #ps -axf //查看父子进程
3.通过发送信令管理进程
信令:
很多基础内部之间进程通信
。直接发送给进程,不需要用户界面
。程序关联着动作到每一个信令
。当发送时指定信令将通过名称或数字:
信令15,TERM(default)-干净的中断 //完整退出,一步步退出,相当于交警拦司机
信令9,KILL-立即中断 //立马退出,相当于警察干劫匪
信令1,HUP-重读取配置文件
man 7 signal显示完整的列表
向进程发送信令 。通过PID:kill 【signal】 pid ... 。通过名字:killall [signal] comm ... 。通过表达式:pkill [-signal] pattern
举例:
#kill -15 pid //通过打开两个终端,其中一个终端打开vim 1.txt文件。从另一个终端执行kill -15 pid 查看vim里面结果
等同于#kill -TERM pid
凡是使用vim大家的文件都会在/tmp/目录下生成一个".filename.swp”的文件
使用#pidof vim //查看vim对应进程的进程号
#kill -KILL $(pidof vim)来立即中断vim进程 这种中断方式/tmp/.filename.swp文件不会删除
如有人恶作剧打开xeyes20个
[root@eurm ~]# for NUM in {1..20}
> do
> xeyes &
> done
可以通过#killall -15 xeyes
查找进程
。很复杂:ps options | 其他命令
#ps axo comm,tty | grep ttyS0
。通过预定义的匹配模式:pgrep
#pgrep -U root
#pgrep -G student
。通过程序名字:pidof
#pidof bash
#pgrep -U student vim //查看student用户执行的vim进程
#pgrep -U student,visitor vim //查看student和vistitor用户执行的vim进程号
#killall -9 -u student vim
#pkill -9 -U visitor,student //停止所有的visitor和student用户执行的进程
4.进程优先级
。优先级决定了CPU的访问
。进程的nice值影响优先级
。值的范围从-20到19缺省为0
。越低的nice值意味着越高的CPU优先级
。使用ps -o comm,nice查看
#ps axo “pid,tty,user,comm,nice" | grep vim //查看vim进程的nice值
修改优先级
。可以修改nice值...
.当启动一个进程时:
#nice -n 5 command
.在启动之后:
#renice 5 PID
。只有root可以降低nice值
[root@eurm ~]# ps axo "pid,user,comm,nice,tty" | grep vim //查看vim进程的nice值
7755 root vim 0 pts/0
[root@eurm ~]# renice 10 7755 //修改vim的nice值为10
7755: old priority 0, new priority 10
[root@eurm ~]# nice -n -10 vim /etc/passwd //打开/etc/passwd并且让该进程的优先级为-10
5.top命令
交互式进程管理工具
。控制台:top
。图形界面:gnome-system-monitor
。功能
。显示实时的进程信息
。可以排序,杀死或者重新优化

关于top的解释:
当前时间;上线了多久1天2小时3分钟;3个可以登陆用户;负载平均值:每5min;15min;30min
目前有140进程执行;1个运行的进程;139休眠状态进程,对应下面进程栏的【s】状态;0 stopped表示没有停止进程;0 zombie表示没有僵尸进程(内核无法控制,造成内存泄露问题的)
CPU状态:0.0%us用户使用的;sy系统用到的;100.0%id表示空闲的cpu
内存部分:总内存;已经使用内存,剩余内存
交换空间:等同于微软下面页面文件,拿硬盘空间开启交换空间,将内存中休眠进程放进去执行。一般交换空间是内存的1.5-2倍大小。但是内存超过8G的话,1倍就行。
默认情况下top是按照cpu的百分比来排序的 可以进入控制台输入命令进行交互排序: #top进入中间控制台界面,输入h获取帮助 z开关颜色变化 b开关粗体显示
#top 之后输入F修改top进入如下界面,输入a查看状况跳转到PID出现在第一个字段
Current Sort Field: K for window 1:Def Select sort field via field letter, type any other key to return a: PID = Process Id will be unavailable until a field b: PPID = Parent Process Pid within viewable range is chosen. c: RUSER = Real user name d: UID = User Id Note2: e: USER = User Name Field sorting uses internal values, f: GROUP = Group Name not those in column display. Thus, g: TTY = Controlling Tty the TTY & WCHAN fields will violate h: PR = Priority strict ASCII collating sequence. i: NI = Nice value (shame on you if WCHAN is chosen) j: P = Last used cpu (SMP) * K: %CPU = CPU usage l: TIME = CPU Time m: TIME+ = CPU Time, hundredths n: %MEM = Memory usage (RES) o: VIRT = Virtual Image (kb) p: SWAP = Swapped size (kb) q: RES = Resident size (kb) r: CODE = Code size (kb) s: DATA = Data+Stack size (kb) t: SHR = Shared Mem size (kb) u: nFLT = Page Fault count v: nDRT = Dirty Pages count w: S = Process Status x: COMMAND = Command name/line y: WCHAN = Sleeping in Function z: Flags = Task Flags <sched.h>
需要显示的参数o,f,进入后根据需要显示内容输入对应字母即可。
停止进程:k参数,在弹出的控制台输入进程号,默认是发送15号信令终止进程
r参数调整进程优先级,输入进程id,enter之后输入对应的nice值
s默认3s刷新,输入对应值可以修改刷新时间
w保存这次的配置信息,下次打开会按照本次保存的配置显示。
6.任务控制
。在后台运行进程
。在命令行后追加&:firefox &
。临时暂停运行的程序
。使用Ctrl-z或发送信令19(停止)
。后台管理或挂起任务
。列举任务号和名字:#jobs
。恢复后台:bg 【%jobnum】
。恢复前台:fg【%jobnum】
。发送信令:kill 【-signal】 【%jobnum】终止任务终止jobs里面的数字,需要加上%jobnum(1,2,3...)
系统的1号进程放在/sbin/init下面,如果#kill -9 1的话会导致系统重启
7.计划任务
at一次性任务,crontab用于重复的任务
发送给用户右键而不是直接输出
root可以修改其他用户任务
| Create | at time | crontab -e |
| List | at -l | crontab -l |
| Details | at -c jobnum | N/A |
| Remove | at -d jobnum | crontab -r |
| Edit | N/A | crontab -e |
一次性计划任务at用法:
交互式方式:
[root@eurm ~]# /etc/init.d/atd //at存在于/etc/init.d目录下 用法:/etc/init.d/atd {start|stop|status|restart|condrestart|try-restart|reload|force-reload} [root@eurm ~]# /etc/init.d/atd status //查看at状态 atd (pid 1721) 正在运行... [root@eurm ~]# at now+2min //添加一个一次性任务2分钟之后执行 at> ifconfig eth0:testing 1.1.1.1/24 //任务 at> <EOT> //输入Ctrl+D停止输入 job 1 at 2020-06-01 22:46 [root@eurm ~]# at --help //查看at用法 at: invalid option -- '-' Usage: at [-V] [-q x] [-f file] [-mldbv] time at -c job ... atq [-V] [-q x] atrm [-V] job ... batch [root@eurm ~]# atq //查看当前at任务队列 1 2020-06-01 22:46 a root
重定向方式实现一次性定时任务: [root@eurm ~]# echo "ifconfig eth0:testing 2.2.2.2/24" | at now+2min //配置管道方式输入一次性任务 job 2 at 2020-06-01 22:52 [root@eurm ~]# ping 2.2.2.2 //2min后验证结果 PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data. 64 bytes from 2.2.2.2: icmp_seq=1 ttl=64 time=0.016 ms 64 bytes from 2.2.2.2: icmp_seq=2 ttl=64 time=0.064 ms ^C --- 2.2.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1197ms rtt min/avg/max/mdev = 0.016/0.040/0.064/0.024 ms [root@eurm ~]# /etc/init.d/atd stop //停止atd任务 停止 atd: [确定] [root@eurm ~]# echo "ifconfig eth0:testing 2.2.2.2/24" | at now+2min //查看停止atd后执行命令的报错。 job 3 at 2020-06-01 22:54 Can't open /var/run/atd.pid to signal atd. No atd running? [root@eurm ~]# /etc/init.d/atd start //启动atd 正在启动 atd: [确定]
一次性计划用于和网络相关的比较多。
使用场景:
<test cmd> && echo "<reverse cmd>" | at now+2min
这种指令用于网络这块比较多,如我们修改一个ip地址,当时修改后我们会掉线,找维护人员比较麻烦,我们就可以写一个还原网络的命令,在测试时间之后执行。
[root@eurm ~]# ifconfig eth0 172.24.1.128/16 && \
> echo "/etc/init.d/network restart" | at now+2min
Crontab文件格式
。条目中包含五个有空格间隔的字段和一条命令
每一行一个条目,没有长度的限制
。这五个字段分别为分钟,小时,一个月中的某天,月和一个星期中的某天
。以#开头代表为注释
。#whatis crontab
。更所信息查看man 5 crontab查看example cron file
#crontab -e创建定时任务
#crontab -l查看计划任务

浙公网安备 33010602011771号