Linux的所有进程都是从init这个进程克隆而来的,init的进程号永远为1。Init的父进程为swapped,它的进程号为0并在init启动之后就隐藏了。
Linux进程分为前台进程和后台进程
前台进程是指用户自己发起的进程,用户发起的进程有两种,一种是批处理进程,一种是调度进程(是指在未来的某个时间发起的一次或多次进程)。
后台进程是指系统发起的不需要用户参与,即便用户不登陆也启动的进程,比如一个提供wed服务的进程,不管用户是否登陆,wed进程都会启动。后台进程也成为守护进程(daemon进程)或是服务进程。
ps命令的使用:
ps命令不加任何参数默认显示的是当前用户在当前终端上正在运行的前台进程
ps –e可以显示所有进程
PID是进程的进程号
TTY是显示用户从哪个终端发起的进程(这里显示问号的意思是守护进程,系统自己发起的进程,后台进程,跟任何用户都不相关)
TIME指运行时长,占用cpu的时间之和。
CMD发起这个进程的命令。
ps -ef
显示的进程信息更详细
UID发起进程的用户ID
PID进程id
PPID进程的父进程号
C表示cpu time就是cpu使用的时间
STIME运行时长
TIME指运行时长,占用cpu的时间之和。
CMD发起这个进程的命令
SZ 指所占用的内存空间(memory size)
RSS 占用的物理内存大小
PSR是指当前机器上是一个多处理器系统,0表示在第一颗CPU上运行。
使用pstree命令可以查看进程树,进程之间的父子关系
ps –uroot 可以查看以root发起的进程,-u制定用户(中间不加空格)
ps –H可以显示进程父子进程之间的关系
ps –j 以作业形式显示
ps –ejH 类似作业的形式显示进程间关系,可以详细显示进程之间的父子关系,常用的组合命令
ps –o 可以显示用户自定义的格式,可以跟e搭配使用
ps axjf 以BSD风格显示进程的信息
STAT进程的状态:
进程的状态分为:
运行态R: running
就绪态R: runnable,是指已经准备好只要分配到cpu就能运行起来
停止态T: stopped除非明确调度否则一直停止
睡眠态 : sleep,一种为可中断(唤醒)的睡眠(S),一种为不可中断(D)
S 可中断睡眠
D 不可中断睡眠
僵死态 Z: zombie当一个进程终止的时候会释放自己所占用的内存
并通知父进程来收回,在这个过程中就称为僵死。
小于号< :表示高优先级进程。
N :表示低优先级进程。
s :表示会话的发起者
+ :位于前台的进程
l :多线程的进程
ps aux 以DSB风格显示详细信息,DSB风格是命令后面不能加—(横杠)
ps常用格式:
-ef , -eF 详细信息 sys V 风格
aux BSD风格
-ejH 查看进程树 sys V 风格
axjf BSD风格
-eo 制定字段自定义显示
pgrep 急于进程名或其他属性来查找进程,默认只显示进程号
pgrep –U root 查看root名下运行的所有进程,
pidof 后面跟进程名可显示进程号
进程间通讯:
因为在一个操作系统里面,每个进程都察觉不到另外进程的存在,所以进程间要通讯使用信号来通讯,就是说一个进程要发起一个信号给另外一个进程
使用kill –l可以查看系统中可用的信号列表
或使用 man 7 signal也可以查看
每个信号都用SIG开头后面跟信号本身意义。常用的信号有:
15号SIGTERM :表示终止,让对方完成任务之后终止。
9号SIGKILL : 表示直接终止,不管任务是否完成都要终止进程。
1号SIGHUP :表示让进程不停止的情况下,重新读取配置文件。
2号 SIGINT :表示取消,打断。类似于ctrl + c。
18号SIGCONT:相当于bg命令,在后台继续运行
19号SIGSTOP:相当于ctrl+z,在后台停止运行。
格式为kill -9 processID。(init进程是不能被终止的,就算发送9信号也不会终止),也可以跟多个进程号。
killall process name 所有制定名字的进程都终止。必须跟进程名,也可以跟信号数字来终止,
kill 和 killall 不跟信号数字的话默认使用15号信号。
进程优先级:
静态优先级 :系统制定的优先级,一般是不能调整的,范围为0—99之间
动态优先级 :管理员可以手动调整,范围为100—139之间。
Linux中有个nice值:通俗一点讲就算,比如一个进程优先级为120,另一个为100,为100的就会占用cpu的时间长一些,它为了让120优先级的进程尽可能多的占用cpu就会提高自己的nice值。nice值为负20到正19之间(-20—19)。默认的nice值都为0。如果nice值为-20对应的优先级就为100,19对应的为139。
使用ps –o comm,nice可以查看命令的nice值
有两种方式调整nice值:
nice –n N bash 可以调整bash在运行的时候的nice值(在进程未运行之前调整)。
renice –N pid可以调整已运行的进程nice值(只有管理员才能调低nice值,普通用户只能调高)。例如renice -3 pid
动态查看进程信息
top(cli模式下,在gui模式下可以使用gnome-system-monitor打开类似windows管理器一样的)
每个5秒钟刷新一次,不会退出(使用q键退出)
top –d 3 可以制定每3秒钟刷新一次
top –b 做快照在屏幕上显示
top –d 3 –b 每3秒做个快照在屏幕上显示一次。
top –n 2 –b 做两次快照在屏幕上显示
作业管理job
前台作业 后台作业
在命令后面加一个&可以让命令后台运行
jobs 可以查看当前运行的作业
ctrl+z可以把正在前台运行的作业调到后台去。但作业一旦调入后台就会停止运行
bg 把已经调入后台并停止的作业在后台继续运行,格式为bg加作业id。不加id为默认带+。
fg 可以调出后台运行的作业,如果有多个作业默认调出后面带+号的作业,使用fg跟数字可以调出制定id的作业。
kill %加id之间杀掉作业id,%号一定要有。
如果后台作业正在运行,但是这是又使用logout退出了,那么后台作业就会随之停止。如果不想注销的时候作业停止则使用:
nohup 加作业命令 & 这样即便用户退出了作业依然在后台运行。