一、进程的概念
1、进程和程序的区别
1)程序是静态的概念,本身作为一种软件资源长期保存,而进程是程序的执行过程,它是动态概念,有一定的生命周期,是动态产生和消亡的
2)程序和进程无一一对应关系,一个程序可以由多个进程共用;另一方面,一个进程活动中可以顺序地执行若干程序
2、父进程与子进程
1)子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程
2)在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境
3)父进程终止,子进程自然终止
3、前台进程和后台进程
1)在Shell提示处输入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行其他命令
[root@bogon ~]# find /etc -name init /etc/kdump-adv-conf/kdump_initscripts/init /etc/webmin/init /etc/init /etc/sysconfig/init [root@bogon ~]#
2)在Shell提示处输入命令后,若后随一个&,Shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行,后台进程必须是非交互式的。
[root@bogon ~]# find /etc -name init > /tmp/init.find & [1] 1656 [root@bogon ~]#
1656为处理该命令的子进程ID
4、进程状态
1)就绪:进程已经分配到资源,但因为其他进程正占用CPU,所以暂时不能运行而等待分配CPU的状态
2)等待:因等待某种事件而暂时不能运行的状态
3)运行:进程分配到CPU,正在处理器上运行
5、查看所有登录用户信息 w
[root@bogon ~]# w 22:05:30 up 56 min, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 21:10 54:31 0.05s 0.05s -bash root pts/0 192.168.0.101 21:11 0.00s 0.09s 0.01s w [root@bogon ~]#
1)JCPU:以终端号区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里
2)PCPU:CPU执行程序耗费的时间
3)WHAT:用户正在执行的操作
4)load average:分别显示系统在过去的1、5、15分钟内的平均负载程度
5)FROM:显示用户从何处登录
6)IDEL:用户闲置时间
7)查看个别用户登录信息:w 用户名
6、查看系统中的进程 ps
常用选项:
a:显示所有用户的进程
u:显示用户名和启动时间
x:显示没有控制终端的进程
e:显示所有进程,包括没有控制终端的进程
l:长格式显示
w:宽行显示
1)查看隶属于自己的进程
[root@bogon ~]# ps PID TTY TIME CMD 1581 pts/0 00:00:00 bash 1606 pts/0 00:00:00 ps [root@bogon ~]#
2)查看隶属于自己进程的详细信息ps -u or -l
[root@bogon ~]# ps -u Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1473 0.0 0.0 2004 484 tty2 Ss+ 21:24 0:00 /sbin/mingetty root 1475 0.0 0.0 2004 480 tty3 Ss+ 21:24 0:00 /sbin/mingetty root 1477 0.0 0.0 2004 480 tty4 Ss+ 21:24 0:00 /sbin/mingetty root 1479 0.0 0.0 2004 480 tty5 Ss+ 21:24 0:00 /sbin/mingetty root 1481 0.0 0.0 2004 508 tty6 Ss+ 21:24 0:00 /sbin/mingetty root 1552 0.0 0.1 8016 1652 tty1 Ss+ 21:24 0:00 -bash root 1581 0.0 0.1 6736 1612 pts/0 Ss 21:30 0:00 -bash root 1607 2.0 0.1 6548 1040 pts/0 R+ 21:33 0:00 ps -u [root@bogon ~]#
3)查看系统中指定进程信息
[root@bogon ~]# ps -le | grep sshd 5 S 0 1331 1 0 80 0 - 2131 - ? 00:00:00 sshd 4 S 0 1579 1331 0 80 0 - 2903 - ? 00:00:00 sshd [root@bogon ~]#
[root@bogon ~]# ps -ef | grep sshd root 1331 1 0 21:24 ? 00:00:00 /usr/sbin/sshd root 1579 1331 0 21:30 ? 00:00:00 sshd: root@pts/0 root 1624 1581 0 21:46 pts/0 00:00:00 grep sshd [root@bogon ~]#
7、kill—杀死进程
1)关闭进程:kill 进程号
2)kill -9 进程号(强行关闭)
3)kill -l 进程号(重启进程)
4)关闭图形程序 xkill
5)结束所有进程 killall 进程名称
6)查找服务进程号 pgrep 服务名称
7)关闭进程:pkill 进程名称
8、指定程序的运行优先级
1)nice 指定程序的运行优先级
格式:nice -n command
例如:nice -5 myprogram
2)renice 改变一个正在运行的进程的优先级
格式:renice n pid
例如:renice -5 777
3)优先级取值范围(-20,19)
9、nohup
使进程在用户退出登录后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认存储到文件nohup.out中
格式: nohup program &
[root@bogon ~]# nohup find /etc -name init* > /root/find.init.20121225 &
10、进程的挂起和恢复
1)进程的中止(挂起)和终止
挂起:Ctrl+Z
终止:Ctrl+C
2)进程的恢复
恢复到前台继续运行 fg
恢复到后台继续运行 bg
3)查看被挂起的进程 jobs
[root@bogon ~]# jobs [1]+ Stopped find / -name inittab [root@bogon ~]#
调到前台执行:fg 编号
[root@bogon ~]# fg 1 find / -name inittab /etc/webmin/inittab /etc/inittab /backup/etc/inittab
调到后台执行 bg 编号
[root@bogon ~]# bg 1
11、top
进程状态显示和进程控制,每5秒钟自动刷新一次(动态显示)
常用选项:(在top执行后使用)
d:指定刷新的时间间隔
c:显示真个命令行而不仅仅显示命令名
u:查看指定用户的进程
k:终止执行中的进程
h or ?:获得帮助
r:重新设置进程优先级
W:将当前设置写入~/.toprc文件中
二、计划任务
1、计划任务的命令
1)at 安排作业在某一时刻执行一次
安排一个或多个命令在指定时间运行一次
at的命令格式及参数:
at [-f 文件名] 时间
at命令指定时间的方式:
绝对计时方法:
midnight noon teatime
hh:mm [today]
hh:mm: tomorrow
hh:mm 星期
hh:mm MM/DD/YY
相对计时方法:
now + n minutes
now + n hours
now + n days
指定在今天下午18:00执行某命令,假设现在时间是下午15:00,2013年1月2日
命令格式如下:
at 6:00pm
at 18:00
at 18:00 today
at now + 3 hours
at now + 180 minutes
at 18:00 2.1.13
at 18:00 1/2/13
交互方式执行:比如在5分钟后把/etc/motd 中的内容广播出去
[root@localhost ~]# at now +5 minutes at> /usr/bin/wall < /etc/motd at> <EOT> job 1 at 2013-01-01 21:01 [root@localhost ~]#
输入完命令后,按Ctrl+d保存,时间一到,就会把内容广播出去了
使用命令文件方式
把要执行的命令写在脚本文件at.script中,然后使用下面的命令
[root@localhost ~]# at -f at.script 21:20 1/2/13 job 2 at 2013-01-02 21:20 [root@localhost ~]#
at -l or atq 查看队列中的任务
[root@localhost ~]# at -l 2 2013-01-02 21:20 a root [root@localhost ~]#
[root@localhost ~]# atq 2 2013-01-02 21:20 a root [root@localhost ~]#
at -d or atrm 删除队列中的任务
[root@localhost ~]# at -d 2 [root@localhost ~]#
生成的计划任务存放在:/var/spool/at
at 配置文件
作用:限制哪些用户可以使用at命令
/etc/at.allow
/etc/at.deny
2)batch 安排作业在系统负载不重时执行一次
安排一个或者多个命令在系统负载较轻时执行一次(一般情况下负载较轻是指平均负载降到0.8以下)
使用方法同at
3)cron 安排周期性运行的作业
用于生成cron进程所需要的crontab文件
crontab的命令格式
crontab {-l|-r|-e}
-l 显示当前的crontab
-r 删除当前的crontab
-e 使用编辑器编辑当前的crontab文件
crontab文件格式:
分钟 小时 天 月 星期 命令/脚本
minute hour day-of-month month-of-year day-of-week commands
minute 一小时钟的哪一分钟[0~59]
hour 一天中的哪个小时[0~23]
day-of-month 一月中的哪一天[1~31]
month-of-year 一年中的哪一月[1~12]
day-of-week 一周中的哪一天[0~6]
commands 执行的命令
分钟 小时 天 月 星期 命令/脚本
每天凌晨4点执行: 0 4 * * *
每周二和周五下午6点执行: 0 18 * * 2,5(逗号分隔不连续的值)
1月到3月每周二和周五下午6点执行: 0 18 * 1-3 2,5 (连续的值用-连接)
*/2(每隔2分钟)
crontab文件建好以后可以到/var/spool/cron目录中确认