|-进程管理
进程常用命令
|- w查看当前系统信息
|- ps进程查看命令
|- kill终止进程
|- 一个存放内存中的特殊目录/proc
|- 进程的优先级
|- 进程的挂起与恢复
|- 通过top命令查看进程
计划任务
|- 计划任务的重要性
|- 一次性计划at和batch
|- 周期性计划crontab
进程管理的概念
进程和程序区别
1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。
2.程序和进程无一一对应关系。一个程序可以由多个时程公用;另一一方面,一个进程在活动中有可顺序地执行若干个程序
父子进程的关系
1.子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程
2.在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。
3.父进程终止子进程自然终止。
前台进程和后台进程
前台进程
在shell提示处理打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令,很简单,我们在执行这个查找命令时,无法进行其它操作,这个查找就属于前台进程
后台进程
在Shell提示处打入命令,若后随一个&,Shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行。"后台进程必须是非交互式的" ,再来看这个命令就变成了后台进程,我们用同样的条件进行查找,把查找记过放到hzh/test/init.find这个文件中。不影响我们前台其它的操作。
常用进程命令
w 查看当前系统信息
w命令,我在之前的章节用曾用过,当时是查看当前用户信息,当然也可以查看到系统相关的信息。
作用:查看当前系统活动摘要。
[root@bogon cron]# w
:: up :, user, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.203.1 : .00s .17s .02s w
w显示信息的含义:
JCPU: 以终端代号来区分,该终端所有相关的进程的进程执行时,所消耗的CPU时间会显示在这里
PCPU: cpu执行程序消耗的时间
WHAT: 用户下在执行的操作
load average :分别显示系统在过去1、5、15分钟内的平均负载程度。
FROM: 显示用户从何处登录系统,":0"的显示代表该用户时人X Windows下,打开文本模式窗口登录的
IDLE: 用户闲置的时间,这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
查看个别用户信息:w [用户名]
[root@localhost ~]# w root
:: up min, user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.203.1 : .00s .10s .01s w root
ps进程查看命令
进程查看命令:ps
常用选项:
-a:显示所有用户的进程
-u:显示用户名和启动时间
-x:显示没有控制终端的进程
-e:显示所有进程,包括没有控制终端的进程
-l:长格式显示
-w:宽行显示,可以使用多个w进行加宽显示
应用实例:
ps 查看隶属自己的进程
root@fnngj-virtual-machine:~# ps
PID TTY TIME CMD pts/ :: bash pts/ :: ps root@root:~# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD S - wait pts/ :: bash R - - pts/ :: ps
看一下上面的选项都指的什么
PID : 进程号
PPLD: 父进程的进程号
TTY : 进程启动的终端
STAT : 进程当前状态(S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止)
NI : 进程优先级
TIME: 进程自从启动以后启用CPU的总时间
COMMAND/CMD: 进程的命令名
USER: 用户名
%CPU: 占用CPU时间和总时间的百分比
%MEM: 占用内存与系统内存总量的百分比
实列:
ps -u or -l 查看隶属于自己进程详细信息
root@root:~# ps -u or -l
ps -le or -aux 查看所有用户执行的进程的详细信息
root@root:~# ps le or -aux
ps -aux --sort pid 可按进程执行的时间、PID、UID等对进程进行排序
root@root:~# ps -aux --sort pid
ps -uU fnngj 查看某个用记启动的进程
root@root:~# ps -uU fnngj
ps -le | grep init 查看指定进程信息
root@root:~# ps -le | grep init
kill终止进程
在winddow下面,我们要结束一个进程,最简单的方式就是关闭这个程序,相应的进程也会随之结束,遇到不能关闭的情况。会打开任务管理器结果掉。那么在linux下如果做呢?我们可以使用kill命令来终止进程。
为什么要杀死进程?
* 该进程点用了过多的CPU时间
* 该进程缩住了一个终端,使其他前台进程无法运行
* 运行时间过长,但没有预期效果
* 产生了过多到屏幕或磁盘文件的输出
* 无法正常退出
kill用法:
关闭进程:kill [进程号]
root@root:~# kill -l ) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP ) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1 ) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM ) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP ) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ ) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR ) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX
我们看到每个编号对应一个含义,如 9) SIGKILL ;9标注的是SIGKILL ,那么我们可用9来终止进程。
关闭进程:
kill -s 9 [进程号] (强行关闭)
kill -9 [进程号] (强行关闭)
上面的两种形式都可以强行关闭进程。
重启进程:
有时候我们需要把进程重新启动一下,可以下面的命令完成。
kill -1 [进程号] (重启进程)
root@root:~# kill - 重启PID为3567的进程
关闭图形程序:
关闭图形程序: xkill
当你在终端下输入这个命令时,你的鼠标会变成一个小叉子,你只去点你想要关闭的窗口就可以关闭了
其它:
结束所有进程: killall
查找服务进程号: pgrep [服务名称]
关闭进程: pkill [进程名称]
一个存放内存中的特殊目录/proc
这个目录比较特殊,他并不在我们磁盘上,而在我们的内存当中;当前系统运行的所有进程都动态的存放在这个目录中。
root@root:~# ls /proc dma net driver pagetypeinfo execdomains partitions fb sched_debug filesystems schedstat fs scsi interrupts self iomem slabinfo ……
上面每个编号就是以我们当前进程PID所命令的目录名。
当然,当前目录下也存放了一些我们系统的信息
查看我们当前cpu的信息
root@root:~# cat /proc/cpuinfo processor : vendor_id : GenuineIntel cpu family : model : model name : Pentium(R) Dual-Core CPU T4500 @ .30GHz stepping : cpu MHz : 2294.000 cache size : KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable aperfmperf pni ssse3 hypervisor dts bogomips : 4588.00 clflush size : cache_alignment : address sizes : bits physical, bits virtual power management:
查看内存信息
root@root:~# cat /proc/meminfo
MemTotal: kB MemFree: kB Buffers: kB Cached: kB SwapCached: kB Active: kB Inactive: kB Active(anon): kB Inactive(anon): kB Active(file): kB Inactive(file): kB ……
root@root:~# cat /proc/partitions
major minor #blocks name sda sda1 sda2 sda5
我们学过操作系统原理的同学都知道,我们系统在执行程序时有会先后顺序的,但为什么我们的电脑可以边听音乐,边聊QQ,边上网,甚至还可以同时挂几个游戏。因为我们CPU运行超快。他可以把每个程序的进程排好队,这个执行一下,那个执行一下。所以,我们会觉得各种程序是并行运行的。
当然,进程也会分个快慢缓急的,所以要对进程分个优先级。同学们在食堂排队打饭,总理来了,这优先级多高啊。同学们纷纷让开,先给总理打。
* 优先级取值范围为(-20,19)
linux给我们提供的优先级的范围为-20到19,我们启动一个进程时,默认的优先级为0 ,-20的优先级为最大,或者说最高。当然,我们在设置的时候可以写-30,但系统默认为-20.
指定程序的运行优先级
格式:nice -n command
例如:nice --5 command
renice 命令
改变一个正在运行的进程的优先级
格式: renice n pid
例如:renice -5 777
例子:
[root@bogon cron]# ps -le
[root@bogon cron]# renice - [PID]
nohup命令可以在用户退出时继续执行某一进程
一般的命令在用户退登录后就停止执行了,nohup命令可以使进程在用户退出登录后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认存储到文件nohup.out中
格式:
nohup program &
例子:
[root@bogon cron]# nohup find / -name init* > /hzh/test/find.init. &
如果我们没指定/hzh/test/find.init.20120520这个保存位置的话,系统默认会把查询的结果放到nohup.out的文件中。我们一般不会去使用默认方式保存。
进程的挂起与恢复
当我们执行一条命令时,发现太慢或输出内容太多,最常用到的做法就是终止(ctrl+c),那么挂起呢?通俗一点就是暂停呗!^_^!!
进程中止(挂起)和终止
挂起(ctrl+z)
终止(ctrl+c)
[root@bogon ~]# find / -name init* > /hzh/test/find.init.
[]+ Stopped find / -name init* >/hzh/test/find.init.
被暂停的进程会提示我们Stopped
小知识:系统中有两种运行的进程,我们在前台是看不到的。一种是后台执行的命令,一种就是被暂停的。那我们通过什么方式查看被暂停和后台执行的进程呢?
查看被挂起的进程(jobs)
进程的恢复:
恢复到前台继续运行(fg)
恢复到后台继续运行(bg)
[root@bogon ~]# jobs 通过jobs命令可以查看后被暂停的进程
[]+ Stopped find / -name init* >/hzh/test/find.init.
[root@bogon ~]# fg fg会将暂停的进程恢复到前台继续执行。 find / -name init* >/hzh/test/find.init. [root@bogon ~]# bg bg会将暂停的进程恢复到后台继续执行 []+ find / -name init* >/hzh/test/find.init. &
通过top命令查看进程
top命令与前面介绍的ps命令相似,已经介绍了ps,为什么还要top?top有它自己的优点呢。它比ps显示的信息更详细。而且是动态的噢,信息是在不断变化的噢!
[root@bogon ~]# top top - :: up min, user, load average: 0.00, 0.04, 0.06 Tasks: total, running, sleeping, stopped, zombie Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.3% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 1034536k total, 232864k used, 801672k free, 60188k buffers Swap: 1052248k total, 0k used, 1052248k free, 118692k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND root S 0.3 0.8 :05.44 X root S 0.3 0.2 :00.26 sshd root R 0.3 0.1 :00.45 top root S 0.0 0.1 :00.97 init root RT S 0.0 0.0 :00.00 migration/ root S 0.0 0.0 :00.00 ksoftirqd/ root - S 0.0 0.0 :00.03 events/ root - S 0.0 0.0 :00.01 khelper root - S 0.0 0.0 :00.00 kthread root - S 0.0 0.0 :00.00 kacpid root - S 0.0 0.0 :00.01 kblockd/ root S 0.0 0.0 :00.00 khubd root S 0.0 0.0 :00.00 pdflush root S 0.0 0.0 :00.18 pdflush root S 0.0 0.0 :00.00 kswapd0 root - S 0.0 0.0 :00.00 aio/ root S 0.0 0.0 :00.00 kseriod
常用选项:
d : 指定刷新的时间间隔
c : 显示整个命令而不仅仅显示命令名
在命令运行的时候按键盘d,会出现如下提示要求你输入刷新的间隔时间
Change delay from 3.0 to: 10(秒)
常用命令:
u : 查看指定用户的进程
k : 终止执行中的进程
h or ? 获得帮助
r: 重新设定进程优先级
s: 改变刷新的时间间隔
W: 将当前设置写入~/.toprc文件中
计划任务
我们在系统的管理中,很多时候不是及时的去操作,比如对某一网站数据的备份,备份的过程需要占用大量的系统资源,凌晨三四点的时候系统访问用户最少,系统最空闲。但我们的系统的系统管理员总不能老那个时间爬起来操作吧。
计划命令分一次性计划和周期性计划。比如我要在今年10月1结婚,这是一次性的计划。不能每年的10月1结婚吧,真有女女愿意结,咱经济上也吃不消呀。睡觉就是周期性的计划。比如,我给自己规定每天晚上的11点半睡觉。那么到时间我就上床睡觉。
at 安排作业在某一时刻执行一次
batch 安排作业在系统负载不重时执行一次
cron 安排周期性运行的作业
一次性计划at和batch
at命令指定时间的方式
绝对计时方法:
midnight noon teatime
hh:mm [today]
hh:mm tomorrow
hh:mm 星期
hh:mm MM/DD/YY
相对计时方法:
now+n minutes
mow+n hours
now+n days
用法:
指定在今天下午17:30执行某命令(假设现在时间是下午14:30,2012年1月11日)
命令格式:
at :30pm
at :
at : today
at now+ hours at now+ minutes at : 12.1. at : 1.11.
[root@bogon ~]# at now+ minutes at>
我们定的时间是5分钟之后,现在可以在at下面输入各种任务,保存!5分钟之后执行;不过,我们需要注意,在用命令时最好写命令的绝对路径,为了安全。
[root@bogon ~]# at now+ minutes at> /usr/bin/wall < /etc/motd 做一个广播,把etc/motd 文件广播出去 at> 可以继续写其它的计划 at> <EOT> job at -- : ctrl+d保存计划并退出
是否还担心我们的计划是否启动,通过下面两个命令查看at进程是否正常启动
[root@bogon test]# at -l -- : a root [root@bogon test]# atq -- : a root
如果真的没有启动的话,可以通过手工方式重新启动一下
[root@bogon ~]# /etc/rc.d/init.d/atd start
删除at计划任务
[root@bogon test]# at -d
查看at计划任务
[root@bogon test]# ls /var/spool/at/
batch命令
作用:
安排一个或多个命令在系统负载较轻进运行一次(一般情况下负载较轻指平均负载降到0.8以下)
使用方法同at
周期性计划命令crontab
作用:用于生成cron进程所需要的crontab文件
crontab的命令格式
crontab {-l|-r|-e}
-l 显示当前的crontab
-r 删除当前的crontab
-e 使用编辑器编辑当前crontab文件
好多人都觉得周期计划任务设置起来比较麻烦,其实我们只要掌握规律就很好设置。
crontab -e
规则: 把知道的具体的时间添上,不知道的都添加上*
分钟 小时 天 月 星期 命令/脚本
假如,我们每天早上4点要做一下操作,以下面方式表示:
分钟 小时 天 月 星期 命令/脚本
* * * * [具体的操作]
假如,我们每周一和三下午的6点要做一下操作,以下面方式表示:
分钟 小时 天 月 星期 命令/脚本
* * * , [具体的操作]
案例:在上学的时候都有上机课,周一到周五,下午5点30上课结果。我们需要在5点30发一个通知,5点45自动关机。设定计划任务需要分两步完成,第一步提醒,第二步关机
分钟 小时 天 月 星期 命令/脚本
30 17 * * 1-5 /usr/bin/wall < /hzh/test/guanji.wall
45 17 * * 1-5 /usr/bin/shudown -h now
操作方法:
[root@bogon test]# crontab -e 回车会进入一个vi文本中
根据我上面介绍格式编写内容,然后保存退出
crontab: installing new crontab 表示创建计划成功
通过下面方式进行查看计划:
[root@bogon test]# cd /var/spool/cron
[root@bogon cron]# ls
root
[root@bogon cron]# cat root
* * - /usr/bin/shudown -h now