进程:已启动的可执行程序
/proc目录下数字为名的目录,代表进程,保存着目录的属性信息。每个进程的PID是唯一的(即使进程退出,其他进程也不会占用其PID)
现有(父)进程复制自己的地址空间来创建一个新的(子)进程结构。每个新进程分配有一个唯一的PID,满足跟踪和安全之需。
标志 | 内核定义的状态名称和描述 |
---|---|
R | TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪 |
S | TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中 |
D | TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态 |
K | TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态 |
T | TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复) |
T | TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志 |
Z | EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放 |
X | EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到 |
< | 高优先级进程 |
N | 低优先级进程 |
+ | 前台进程组中的进程 |
| | 多线程进程 |
s | 会话进程首进程 |
由于不是每种进程都与其他进程同样重要,可告知调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略称为SCHED_OTHER(也称为SCHED_NORMAL),但还有一些其他策略可用于不同的目的。
由于并非所有进程都以同样的方式创建,可为采用SCHED_NORMAL策略运行的进程指定相对优先级。此优先级称为进程的nice值。一个进程可以有40种不同级别的nice值。
这些nice级别的范围是从-20到19。默认情况下,进程将继承其父进程的nice级别,通常为0
nice级别越高,表示优先级越低(该进程容易将其CPU使用量让给其他进程)
nice级别越低,表示优先级越高(该进程更加不倾向于让出CPU)
如果不存在资源争用(例如当活动进程数少于可用CPU核心数时),即使nice级别高的进程也将仍使用它们可使用的所有可用CPU资源。但当请求CPU时间的进程数超过可用核心数时,nice级别较高的进程将比nice级别较低的进程收到更少的CPU时间
为很占CPU资源的进程设置较低的nice级别可能会对同一系统上运行的其他进程的性能造成负面影响,所以仅允许root用户设置负nice级别以及降低现有进程的nice级别。
普通非特权用户仅允许设置正的nice级别。只能对现有进程提升nice级别,而不能降低nice级别。
renice NI PID 调整已启动进程的nice值
示例:
另一台设备正执行vi命令
[root@localhost ~]# ps -elf | grep vi
4 S root 745 1 0 80 0 - 24903 poll_s 18:14 ? 00:00:00 /usr/bin/VGAuthService -s
4 S root 1528 1467 0 80 0 - 31561 poll_s 18:36 pts/1 00:00:00 vi abc
0 S root 1531 1442 0 80 0 - 28169 pipe_w 18:36 pts/0 00:00:00 grep --color=auto vi
[root@localhost ~]# renice -1 1528
1528 (进程 ID) 旧优先级为 0,新优先级为 -1
[root@localhost ~]# ps -elf | grep vi
4 S root 745 1 0 80 0 - 24903 poll_s 18:14 ? 00:00:00 /usr/bin/VGAuthService -s
4 S root 1528 1467 0 79 -1 - 31561 poll_s 18:36 pts/1 00:00:00 vi abc
0 S root 1536 1442 0 80 0 - 28169 pipe_w 18:39 pts/0 00:00:00 grep --color=auto vi
nice -n NI COMMAND 在启动时指定nice值
示例:
[root@localhost 123]# nice -n -1 vi abc
[1]+ 已停止 nice -n -1 vi abc
(kill -9 PID/$(pidof COMMAND)强行终止进程)
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
[root@localhost 123]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 129120 6460 ? Ss 18:14 0:00 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 18:14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 18:14 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 18:14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 18:14 0:00 [migration/0]
[root@localhost 123]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32280 ep_pol 18:14 ? 00:00:00 /usr/lib/syst
1 S root 2 0 0 80 0 - 0 kthrea 18:14 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 18:14 ? 00:00:00 [ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 18:14 ? 00:00:00 [kworker/0:0H
1 S root 7 2 0 -40 - - 0 smpboo 18:14 ? 00:00:00 [migration/0]
1 S root 8 2 0 80 0 - 0 rcu_gp 18:14 ? 00:00:00 [rcu_bh]
1 R root 9 2 0 80 0 - 0 - 18:14 ? 00:00:00 [rcu_sched]
[root@localhost 123]# ps -elH
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
1 S 0 3 2 0 80 0 - 0 smpboo ? 00:00:00 ksoftirqd/0
1 S 0 5 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:00 migration/0
1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
1 R 0 9 2 0 80 0 - 0 - ? 00:00:00 rcu_sched
5 S 0 10 2 0 -40 - - 0 smpboo ? 00:00:00 watchdog/0
5 S 0 12 2 0 80 0 - 0 devtmp ? 00:00:00 kdevtmpfs
1 S 0 13 2 0 60 -20 - 0 rescue ? 00:00:00 netns
1 S 0 14 2 0 80 0 - 0 watchd ? 00:00:00 khungtaskd
1 S 0 15 2 0 60 -20 - 0 rescue ? 00:00:00 writeback
[root@localhost 123]# ps -o pid,ni
PID NI
1467 0
1602 0
1688 0
示例:
[root@localhost 123]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─login───bash
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rhnsd
├─rhsmcertd
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───vi
│ └─sshd───bash─┬─pstree
│ └─vi
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
示例:
[root@localhost 123]# pgrep vi
745
1602
1619
示例:
[root@localhost 123]# pidof vi
1619 1602
[root@localhost 123]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1479388 3008 226484 0 0 28 2 56 57 0 0 100 0 0
0 0 0 1479372 3008 226516 0 0 0 0 46 40 0 0 100 0 0
0 0 0 1479372 3008 226516 0 0 0 0 39 34 0 0 100 0 0
[root@localhost 123]# vmstat -s
1867024 K total memory
158112 K used memory
128328 K active memory
124720 K inactive memory
1479388 K free memory
3008 K buffer memory
226516 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
405 non-nice user cpu ticks
0 nice user cpu ticks
1262 system cpu ticks
682511 idle cpu ticks
5 IO-wait cpu ticks
0 IRQ cpu ticks
44 softirq cpu ticks
0 stolen cpu ticks
182485 pages paged in
11068 pages paged out
0 pages swapped in
0 pages swapped out
376612 interrupts
386632 CPU context switches
1569233664 boot time
1941 forks