Linux这么简单之进程管理

本文介绍了Linux中进程与程序的区别,强调进程是操作系统执行的基本单位,具有并发性和交往性。并详细讨论了进程与线程的不同,指出一个进程可以有多个线程。接着,列举了多种进程管理工具,如pstree用于查看进程树,ps显示进程状态,pgrep按程序名查找进程,以及killall, kill, pkill用于终止进程。这些工具提供了对Linux系统中进程的全面管理和控制。" 129732864,1066077,Android源码解析:JobScheduler服务启动与执行,"['android', 'JobScheduler', 'JSS', '系统服务', '源码分析']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 终止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值