程序在系统中运行,都是以进程的形式存在的!
下面来介绍如何查看系统中的进程
程序运行在进程系统上,称为 - 进程
Linux系统中的ps命令支持三个不同类型的命令行参数。
下面只介绍 Unix 的,也就是说 单破折号的。
-A #显示所有进程
-a #显示除控制进程和无终端的进程之外的所有进程
-e #显示所有进程
-f #显示完整格式输出
-l #显示长列表
-H #层级显示进程(树状)
-L #显示进程中的线程
上述只列出了我认为比较有用的,还有很多其他的,可以根据需要自己去查找补充。
举例子:ps -ef
kylin@kylin-thinkpadx390:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:04 ? 00:00:01 /sbin/init splash
root 2 0 0 09:04 ? 00:00:00 [kthreadd]
root 3 2 0 09:04 ? 00:00:00 [rcu_gp]
root 4 2 0 09:04 ? 00:00:00 [rcu_par_gp]
root 6 2 0 09:04 ? 00:00:00 [kworker/0:0H-events_highpri
root 9 2 0 09:04 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 09:04 ? 00:00:00 [ksoftirqd/0]
其中:
UID #启动该进程的用户
PID #进程的进程号
PPID #父进程的进程号
C #进程生命周期中的cpu利用率
STIME #进程开始的系统时间
TTY #进程启动时的终端设备
TIME #运行进程需要的累计CPU时间
CMD #启动的程序名称
如果想显示的更全一些,可以使用:ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 18715 18703 0 80 0 - 3435 do_wai pts/0 00:00:00 bash
4 R 1000 26892 18715 0 80 0 - 3622 - pts/0 00:00:00 ps
其中:
F #内核分配给进程的系统标记
S #进程的状态(0-正在运行,S-正在休眠,R-可运行,正在等待运行,Z-僵化,进程已结束但父进程已不存在,T-停止)
PRI #优先级,数字越大,优先级越低
NI #谦让度nice
ADDR #进程的内存地址
SZ #假如进程被换出,所需交换空间的大致大小
WCHAN #进程休眠的内核函数的地址
ps -efH
kylin@kylin-thinkpadx390:~$ ps -efH
UID PID PPID C STIME TTY TIME CMD
root 833 1 0 09:04 ? 00:00:00 /bin/bash /usr/bin/execsta
root 884 833 0 09:04 ? 00:00:00 /usr/bin/miracle-wifid -
root 1082 884 0 09:04 ? 00:00:00 /usr/bin/miracle-sinkc
ps:我使用的是麒麟系统,国产Linux,里面的命令和Linux基本是一致的。上述,都是从麒麟系统中截取出来的。
ps命令只能显示某个特定时间点的信息,如果想要实时监测,需要用top命令。
下面来介绍一下 实时监测进程指令 top
top

平均负载有3个值:最近1分钟,最近5分钟和最近15分钟的平均负载。
最后一部分显示了当前运行中的进程的下详细列表,有些类似ps命令。
PID #进程号
USER #进程属主的名字
PR #进程的优先级
NI #进程的谦让度
VIRT #进程占用的虚拟内存总量
RES #进程占用的物理内存总量
SHR #进程和其他进程共享的内存总量
S #进程的状态(D-可中断的休眠状态,R-运行状态,S-休眠状态,T-跟踪状态或停止状态,Z-代表僵化状态)
%CPU #进程使用的CPU时间比例
%MEM #进程使用的内存占可用内存的比例
TIME+ #自进程启动到目前为止的CPU时间总量
COMMAND #进程的命令行名称,也就是启动的程序名
其中,top命令在启动时会按照 %CPU 来排序,也可以重新排序。
上面两小节记述了进程的查看方式,那么如何结束一个进程呢?
进程的状态有多种,针对不同的进程状态,需要不同的处理方式。
接下来,简单记述一下进程状态
一般来说,进程有三个状态:
其中,根据状态之间可相互转换,可以得出有以下六种状态转换,可以看成三组:
1. 就绪 TO 运行:正常程序
2. 运行 TO 就绪:两种可能,a.进程占用时间长,系统分配给该进程的时间是有限的 b.优先级问题
3. 就绪 TO 阻塞:不存在此种可能,没有运行,谈何阻塞
4. 阻塞 TO 就绪:进程等待的事件发生,就进入就绪队列
5. 运行 TO 阻塞
6. 阻塞 TO 运行:不存在此种可能,即时给阻塞进程分配CPU,也不会执行,操作系统在进行调度时不会从阻塞队列进行挑选,会从就绪队列进行挑选
还可能见到的一些其他状态
第三节记述了进程的各种可能状态,
下面来介绍一下,如何结束进程?
Linux进程信号:
| 信号 | 名称 | 描述 |
|---|---|---|
| 1 | HUP | 挂起 |
| 2 | INT | 中断 |
| 3 | QUIT | 结束运行 |
| 9 | KILL | 无条件终止 |
| 11 | SEGV | 段错误 |
| 15 | TERM | 尽可能终止 |
| 17 | STOP | 无条件停止运行,但不终止 |
| 18 | TSTP | 停止或暂停,但继续在后台运行 |
| 19 | CONT | 在STOP或TSTP之后恢复执行 |
解释:
kill
注意:
kill PID #其中PID为进程号
killall
killall http*