前言
我们拥有操作系统就是为了运行用户程序,程序的运行需要调动进程,因此进程管理就是所有操作系统的心脏。
实际上,进程就是正在执行的程序代码的时事结果。
进程的理解
- 进程:
进程是静态的文件,是运行中的程序的一个副本,且存在生命周期。 - 进程状态:
状态 | 定义 |
---|---|
R(TASK_RUNNING) | 可执行状态(RUNNING,READY) |
S(TASK_INTERRUPTIBLE) | 可唤醒睡眠状态 |
D(TASK_UNINTERRUPTIBLE) | 不可唤醒睡眠状态 |
T(TASK_STOPPED) | 暂停状态 |
Z(EXIT_ZOMBIE) | 僵死态 |
正在运行与就绪态的区别在于是否正在占用cpu的时间片
就绪态与可唤醒状态的区别在于是否在cpu运行的队列中
可唤醒与不可唤醒的区别在于是否拥有程序运行所需要的系统资源。
ctrl+z可使进程进入后台的暂停状态,一般暂停状态是人为操作的。
僵死态指这个进程无父进程给回收其系统资源,会造成系统资源浪费。
进程查看
-
进程树pstree
[root@workstation Desktop]# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager───2*[{NetworkManager}] ├─accounts-daemon───2*[{accounts-daemon}] ├─agetty ├─atd ├─auditd─┬─sedispatch │ └─2*[{auditd}] ├─avahi-daemon───avahi-daemon ├─boltd───2*[{boltd}] ├─chronyd ├─colord───2*[{colord}] ├─crond ├─cupsd ├─dbus-daemon───{dbus-daemon} ├─dnsmasq───dnsmasq ├─firewalld───{firewalld} ...
进程:是资源调配的最小单位。
线程:内核调度的对象,拥有独立的程序计数器、进程栈和一组进程寄存器。对于linux而言,线程是特殊的进程。也是进程运行的最小单位。
systemd是守护进程。 -
ps命令(显示当前命令执行时进程状态)
a 显示与终端相关进程(BSD)
x 显示所有与终端无关进程(BSD)
u 以用户为归类来显示进程状态信息(BSD)
f 层级结构显示进程信息[root@workstation Desktop]# ps PID TTY TIME CMD 2499 pts/0 00:00:00 bash 3273 pts/0 00:00:00 ps [root@workstation Desktop]# bash [root@workstation Desktop]# ps PID TTY TIME CMD 2499 pts/0 00:00:00 bash 3288 pts/0 00:00:00 bash 3326 pts/0 00:00:00 ps [root@workstation Desktop]# ps f PID TTY STAT TIME COMMAND 2499 pts/0 Ss 0:00 bash 3288 pts/0 S 0:00 \_ bash
o 指定查看选项,pid,comm,nice,pri,pcpu,stat,ppid
-e 显示所有进程(uinx)
-f 显示完整格式信息(unix)
-H 层级结构显示进程的相关信息
-o 指定查看选项,pid,comm,nice,%cpu,%mem,nice[root@workstation Desktop]# ps axo pid,comm,nice,stat | less PID COMMAND NI STAT 1 systemd 0 Ss 2 kthreadd 0 S 3 rcu_gp -20 I< 4 rcu_par_gp -20 I< 6 kworker/0:0H-kb -20 I< 8 mm_percpu_wq -20 I< 9 ksoftirqd/0 0 S 10 rcu_sched 0 I 11 migration/0 - S 12