linux中所有的进程都是相互联系的,除了初始化进程(init进程,进程号为1,无父进程),所有的进程都有一个父进程。
新的进程不是被建立的,而是被复制的,或者从以前的进程复制而来。
1、调度启动进程
at命令
用户使用at命令在指定时刻执行指定的命令。
例:指定凌晨1:00执行命令,在哪天的凌晨1:00执行那?如果是在头一天22:00制订,在凌晨1:00前退出系统,则该命令将会在第二天凌晨1:00才执行。
at命令只能被执行一次
语法
at [-V] [-q 序列] [-f 文件名] [-mldbv] 时间 |
at –c 作业 [作业…] |
例:
at 17:30 |
at 17:30 today |
at now + 5 hours |
at 17:30 2/24/2010 |
在任何情况下,只有root用户可以使用at命令,对于其它用户是否可以使用,取决于两个文件(/etc/at.allow 和 /etc/at.deny)
cron命令
crontab命令
分钟 小时 一个月的第几天 一年的第几个月 一周的第几天 命令
2、进程的挂起及恢复
挂起
ctrl+z可以挂起当前的前台作业
查看
用jobs命令可以显示shell的作业清单,包括具体的作业,作业号,作业所处的状态。
恢复
两种选择
- 用fg命令将挂起的作业放回到前台执行
- 用bg命令将挂起的作业放回到后台执行
3、进程管理
who命令
显示目前有那些人在使用
/usr/bin目录下
uname [-参数]
w命令
类似于who命令,但比who命令更强大,可以显示当前用户正在执行的工作
ps命令:显示目前有哪些程序在执行
/bin目录下
ps [-参数]
-e | 列出所有进程 |
-h | 不显示标题 |
-l | 以长格式显示更详细的资料 |
-u | 按用户名和启动时间的顺序来显示进程 |
-a | 显示所有用户的所有进程(包括其它用户) |
-x | 显示无控制终端的进程 |
-f | 用树形格式来显示进程 |
-r | 显示运行中的进程 |
-j | 用任务格式来显示进程 |
-w | 宽输出 |
-ww | 避免详细参数被截断 |
常用的参数组合是 aux 或 lax,还有参数 f 的应用
输出的解释
USER | 进程的属主 | ||||||||||||||||||||||||||
PID | 进程的ID | ||||||||||||||||||||||||||
PPID | 父进程 | ||||||||||||||||||||||||||
%CPU | 进程占用的CPU百分比 | ||||||||||||||||||||||||||
%MEM | 占用内存的百分比 | ||||||||||||||||||||||||||
NI | 进程的NICE值,数值大,表示较少占用CPU时间 | ||||||||||||||||||||||||||
VSZ | 进程虚拟大小 | ||||||||||||||||||||||||||
RSS | 驻留中页的数量 | ||||||||||||||||||||||||||
TTY | 终端ID | ||||||||||||||||||||||||||
STAT | 进程状态(有以下几种)
| ||||||||||||||||||||||||||
WCHAN | 正在等待的进程资源 | ||||||||||||||||||||||||||
START | 启动进程的时间 | ||||||||||||||||||||||||||
TIME | 进程消耗CPU的时间 | ||||||||||||||||||||||||||
COMMAND | 命令的名称和参数 |
top命令
和ps命令基本作用相同,但是一个动态显示过程。
top [-参数]
-d | 指定每两次刷新屏幕的时间间隔(delay) |
-q | 使top没有任何延时的进行刷新 |
-S | 指定累计模式 |
-s | 使top命令在安全模式中运行 |
-i | 是top不显示任何闲置或僵尸进程 |
-c | 显示整个命令行而不是只是显示命令名 |
显示(头部)
uptime | 系统启动时间,已经运行时间和3个平均负载值(1s,5s和15s) |
processes | 最近一次运行的进程总数 |
CPU states | |
Mem | 内存使用情况 |
Swap | 交换空间统计 |
显示(列表)
PID | 每个进程的ID | ||||||||||
PPID | 每个进程的父进程ID | ||||||||||
UID | 每个进程所有者的UID | ||||||||||
USER | 每个进程所有者的用户名 | ||||||||||
PRI | 每个进程的优先级别 | ||||||||||
NI | 该进程的优先级值 | ||||||||||
SIZE | 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB | ||||||||||
TSIZE | 该进程的代码大小。对于内核进程这是一个很奇怪的值 | ||||||||||
DSIZE | 数据和堆栈的大小 | ||||||||||
TRS | 文本驻留大小 | ||||||||||
D | 被标记为“不干净”的页项目 | ||||||||||
LIB | 使用的库页的大小。对于ELF进程没有作用 | ||||||||||
RSS | 该进程占用的物理内存的总数量,单位是KB | ||||||||||
SHARE | 该进程使用共享内存的数量 | ||||||||||
STAT |
| ||||||||||
%CPU | 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比 | ||||||||||
%MEM | 该进程占用的物理内存占总内存的百分比 | ||||||||||
TIME | 该进程自启动以来所占用的总CPU时间 如果进入的是累计模式,那幺该时间还包括这个进程子进程所占用的时间,且标题会变成CTIME | ||||||||||
COMMAND | 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行 |
和top交互的命令
<空格> | 立即刷新显示 |
Ctrl+L | 擦除并且重写屏幕 |
h或者? | 显示帮助画面,给出一些简短的命令总结说明 |
k | 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什幺样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 |
i | 忽略闲置和僵死进程。这是一个开关式命令。 |
q | 退出程序 |
r | 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 |
S | 切换到累计模式 |
s | 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加 |
f或者F | 从当前显示中添加或者删除项目 |
o或者O | 改变显示项目的顺序 |
l | 切换显示平均负载和启动时间信息 |
m | 切换显示内存信息 |
t | 切换显示进程和CPU状态信息 |
c | 切换显示命令名称和完整命令行 |
M | 根据驻留内存大小进行排序 |
P | 根据CPU使用百分比大小进行排序 |
T | 根据时间/累计时间进行排序 |
W | 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法 |
kill:中断一个进程
当需要中断一个前台进程时,可以ctrl+c,但对于后台进程必须使用kill命令。
/bin目录下
kill [-s 信号 | -p] [pid]
kill -l [信号]
-s | 指定需要发送的信息,可以时信号名,也可以是对应的数位(信号9:强行kill。默认是15)。 |
-p | 指定kill命令只是显示进程pid,并不真正送出结束信号 |
-l | 显示信号名称列表(也可以在/usr/include/linux/signal.h文件中找到) |
例如:
kill -9 -1 | 终止你拥有的全部进程 |
killall:中断一个进程
/bin目录下
通过程序的名字直接杀死进程
nohup命令
理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。
一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可以使用输出重定向,让它输出到一个特定的文件)。
例: #nohup sort sales.dat
这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。
nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向,则只有错误信息放在nohup.out文件中。