进程管理
1.进程与程序
(1)程序与进程定义
程序是一组指令与参数的集合,按照既定的逻辑控制计算机运行用来完成特定的任务。
进程是运行着的程序,是操作系统执行的基本单位,是程序运行的过程,动态,有生命周期及运行状态。
- 从用户角度:进程是程序的一次动态的执行过程。
- 从操作系统:是操作系统分配的内存,CPU时间片等资源的基本单位
- 进程是资源分配的最小单位
(2) 进程与程序的区别
- 程序是静态的(一组指令的集合),但是进程是程序运行的动态过程
- 进程与程序不是一一对应关系,相同的程序在不同的数据集上运行就是不同的进程
- 进程具有并发性和交往性,但是程序是封闭的
(3)扩展(进程与线程的区别)
- 一个进程拥有多个线程,但一个线程只能被一个进程所拥有
- 线程不能单独执行,但每一个线程都有程序的入口,执行序列以及程序出口,必须组成进程才能被执行
2.进程管理工具
(1)pstree
pstree:用于查看进程树之间的关系,谁是父进程,谁是子进程,看出谁创建了谁。
用法:pstree 选项
选项:-A:各进程树之间以ASCII码字符来连接
-U:各进程树之间以 utf-8字符来来连接
-p:列出每个进程的PID
-u:列出每个进程的所属账号名称
选项 | 含义 |
---|---|
-A | 各进程树之间以ASCII码字符来连接 |
-U | 各进程树之间以 utf-8字符来来连接 |
-p | 列出每个进程的PID |
-u | 列出每个进程的所属账号名称 |
[root@localhost ~]# pstree -A
systemd-+-NetworkManager---2*[{NetworkManager}]
|-VGAuthService
|-auditd---{auditd}
|-crond
|-dbus-daemon---{dbus-daemon}
|-firewalld---{firewalld}
|-login---bash
|-master-+-pickup
| `-qmgr
|-polkitd---6*[{polkitd}]
|-rsyslogd---2*[{rsyslogd}]
|-sshd-+-sshd---bash---pstree
| `-sshd---sftp-server
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-tuned---4*[{tuned}]
`-vmtoolsd---{vmtoolsd}
(2)ps
ps:显示进程瞬间的运行状态
用法:ps 选项
选项: -a A 显示所有进程
-u 显示以用户为主的进程
-x 显示完整信息 与a一起使用
-l 显示详细信息
选项 | 含义 |
---|---|
-a A | 显示所有进程 |
-u | 显示以用户为主的进程 |
– | – |
-x | 显示完整信息 与a一起使用 |
-l | 显示详细信息 |
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.6 127864 6508 ? Ss 21:12 0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 21:12 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 21:12 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 21:12 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 21:12 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 21:12 0:00 [rcu_bh]
root 9 0.1 0.0 0 0 ? R 21:12 0:02 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 21:12 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 21:12 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 21:12 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< 21:12 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 21:12 0:00 [khungtaskd]
root 16 0.0 0.0 0 0 ? S< 21:12 0:00 [writeback]
root 17 0.0 0.0 0 0 ? S< 21:12 0:00 [kintegrityd]
root 18 0.0 0.0 0 0 ? S< 21:12 0:00 [bioset]
root 19 0.0 0.0 0 0 ? S< 21:12 0:00 [bioset]
root 20 0.0 0.0 0 0 ? S< 21:12 0:00 [bioset]
root 21 0.0 0.0 0 0 ? S< 21:12 0:00 [kblockd]
root 22 0.0 0.0 0 0 ? S< 21:12 0:00 [md]
root 23 0.0 0.0 0 0 ? S< 21:12 0:00 [edac-poller]
root 24 0.0 0.0 0 0 ? S< 21:12 0:00 [watchdogd]
root 25 0.2 0.0 0 0 ? R 21:12 0:03 [kworker/0:1]
root 30 0.0 0.0 0 0 ? S 21:12 0:00 [kswapd0]
root 31 0.0 0.0 0 0 ? SN 21:12 0:00 [ksmd]
root 32 0.0 0.0 0 0 ? SN 21:12 0:00 [khugepaged]
root 33 0.0 0.0 0 0 ? S< 21:12 0:00 [crypto]
root 41 0.0 0.0 0 0 ? S< 21:12 0:00 [kthrotld]
root 43 0.0 0.0 0 0 ? S< 21:12 0:00 [kmpath_rdacd]
root 44 0.0 0.0 0 0 ? S< 21:12 0:00 [kaluad]
root 45 0.0 0.0 0 0 ? S< 21:12 0:00 [kpsmoused]
root 47 0.0 0.0 0 0 ? S< 21:12 0:00 [ipv6_addrconf]
root 60 0.0 0.0 0 0 ? S< 21:12 0:00 [deferwq]
root 92 0.0 0.0 0 0 ? S 21:12 0:00 [kauditd]
root 1700 0.0 0.0 0 0 ? S< 21:12 0:00 [nfit]
root 1737 0.0 0.0 0 0 ? S< 21:12 0:00 [mpt_poll_0]
root 1740 0.0 0.0 0 0 ? S< 21:12 0:00 [mpt/0]
root 1753 0.0 0.0 0 0 ? S< 21:12 0:00 [ata_sff]
root 1757 0.0 0.0 0 0 ? S 21:12 0:00 [scsi_eh_0]
root 1759 0.0 0.0 0 0 ? S< 21:12 0:00 [scsi_tmf_0]
root 1790 0.0 0.0 0 0 ? S 21:12 0:00 [kworker/u256:2]
root 1791 0.0 0.0 0 0 ? S 21:12 0:00 [scsi_eh_1]
root 1795 0.0 0.0 0 0 ? S< 21:12 0:00 [scsi_tmf_1]
root 1797 0.0 0.0 0 0 ? S 21:12 0:00 [scsi_eh_2]
root 1800 0.0 0.0 0 0 ? S< 21:12 0:00 [scsi_tmf_2]
root 2130 0.0 0.0 0 0 ? S< 21:12 0:00 [ttm_swap]
root 2131 0.0 0.0 0 0 ? S 21:12 0:00 [irq/16-vmwgfx]
root 2870 0.0 0.0 0 0 ? S< 21:12 0:00 [kworker/0:1H]
root 2898 0.0 0.0 0 0 ? S< 21:12 0:00 [bioset]
root 2903 0.0 0.0 0 0 ? S< 21:12 0:00 [xfsalloc]
root 2906 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs_mru_cache]
root 2909 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-buf/sda3]
root 2912 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-data/sda3]
root 2915 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-conv/sda3]
root 2917 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-cil/sda3]
root 2919 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-reclaim/sda]
root 2920 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-log/sda3]
root 2921 0.0 0.0 0 0 ? S< 21:12 0:00 [xfs-eofblocks/s]
root 2922 0.0 0.0 0 0 ? S 21:12 0:00 [xfsaild/sda3]
root 2988 0.0 0.2 37112 2812 ? Ss 21:12 0:00 /usr/lib/systemd/systemd-journald
root 3020 0.1 0.5 48340 5748 ? Ss 21:12 0:02 /usr/lib/systemd/systemd-udevd
root 3715 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-buf/sda1]
root 3716 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-data/sda1]
root 3718 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-conv/sda1]
root 3719 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-cil/sda1]
root 3720 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-reclaim/sda]
root 3722 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-log/sda1]
root 3723 0.0 0.0 0 0 ? S< 21:13 0:00 [xfs-eofblocks/s]
root 3726 0.0 0.0 0 0 ? S 21:13 0:00 [xfsaild/sda1]
root 3746 0.0 0.0 0 0 ? S< 21:13 0:00 [kworker/u257:0]
root 3750 0.0 0.0 0 0 ? S< 21:13 0:00 [hci0]
root 3751 0.0 0.0 0 0 ? S< 21:13 0:00 [hci0]
root 3753 0.0 0.0 0 0 ? S< 21:13 0:00 [kworker/u257:2]
root 5973 0.0 0.1 62044 1076 ? S<sl 21:13 0:00 /sbin/auditd
root 6167 0.0 0.6 99564 6112 ? Ss 21:13 0:00 /usr/bin/VGAuthService -s
root 6170 0.0 0.1 26376 1776 ? Ss 21:13 0:00 /usr/lib/systemd/systemd-logind
dbus 6176 0.0 0.2 66456 2596 ? Ssl 21:13 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile -
root 6381 0.2 0.6 300720 6328 ? Ssl 21:13 0:04 /usr/bin/vmtoolsd
polkitd 6382 0.0 1.1 613000 11916 ? Ssl 21:13 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 6405 0.0 0.1 126288 1676 ? Ss 21:13 0:01 /usr/sbin/crond -n
root 6410 0.0 0.2 96560 2468 ? Ss 21:13 0:01 login -- root
root 6431 0.2 2.9 358196 29088 ? Ssl 21:13 0:04 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
root 6465 0.0 1.0 551476 10644 ? Ssl 21:13 0:01 /usr/sbin/NetworkManager --no-daemon
root 6915 0.0 0.4 112756 4320 ? Ss 21:13 0:00 /usr/sbin/sshd -D
root 6916 0.0 1.7 573820 17252 ? Ssl 21:13 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 6919 0.0 0.4 214444 4376 ? Ssl 21:13 0:00 /usr/sbin/rsyslogd -n
root 7077 0.0 0.2 89544 2060 ? Ss 21:13 0:00 /usr/libexec/postfix/master -w
postfix 7090 0.0 0.4 89648 4060 ? S 21:13 0:00 pickup -l -t unix -u
postfix 7091 0.0 0.4 89716 4092 ? S 21:13 0:00 qmgr -l -t unix -u
root 7183 0.0 0.1 115436 1988 tty1 Ss+ 21:13 0:00 -bash
root 7205 0.1 0.6 159096 6220 ? Ss 21:14 0:02 sshd: root@pts/0
root 7209 0.0 0.5 158752 5796 ? Ss 21:14 0:00 sshd: root@notty
root 7213 0.0 0.2 72092 2872 ? Ss 21:14 0:00 /usr/libexec/openssh/sftp-server
root 7220 0.0 0.2 115440 2048 pts/0 Ss 21:14 0:00 -bash
root 7256 0.0 0.0 0 0 ? S 21:22 0:00 [kworker/u256:1]
root 7258 0.0 0.0 0 0 ? S 21:26 0:00 [kworker/0:0]
root 7269 0.0 0.0 0 0 ? S 21:42 0:00 [kworker/0:2]
root 7270 0.0 0.1 155360 1872 pts/0 R+ 21:43 0:00 ps -aux
(3)pgrep
pgrep:查看进程的信息,正在被调度的进程的相关信息,通过匹配程序名,找到匹配的进程。
用法:pgrep 选项 命令
选项:-l:同时显示进程名和PID
-o:当匹配多个进程时,显示进程号最小的那个
-n:当匹配多个进程时,显示进程号最大的那个
选项 | 含义 |
---|---|
-l | 同时显示进程名和PID |
-o | 当匹配多个进程时,显示进程号最小的那个 |
-n | 匹配多个进程时,显示进程号最大的那个 |
[root@localhost ~]# pgrep -l ssh
6915 sshd
7205 sshd
7209 sshd
[root@localhost ~]# pgrep -lo ssh
6915 sshd
[root@localhost ~]# pgrep -ln ssh
7209 sshd
(4)killall,kill,pkill
killall:杀死指定名字的进程
用法:killall 选项 程序名
找到需要杀死的进程需要用到ps命令,|管道符,grep命令,查找出进程
选项:-e:要求匹配进程的名称
-L:忽略小写
-g:杀死进程组而不是进程
-l:列出所有已知信号的名称
-w:等待进程死亡
kill:终止指定的进程的运行
用法:kill 选项 进程id(PID)
终止前台命令可以用Ctrl+c,但后台命令用kill,需要先使用ps/pidof/pstree/top获取进程的PID
选项: -l 列出所有信号
-s 指定发送信号
1:HUP 终端断线
9:KILL强制终止
2:INT 中断
3:QUIT 退出
19:STOP 暂停
18:CONT 继续
15:TERM 终止