【linux命令】ps / kill

ps

~$ ps 
    PID TTY          TIME CMD
   4775 pts/1    00:00:00 bash
  16083 pts/1    00:00:00 ps

在这个输出中,列出了两个进程的信息,每个进程的信息由PID(进程ID)、TTY(终端类型)、TIME(CPU时间)和CMD(命令名)四个字段组成。

PID: 进程ID,是系统分配给每个进程的唯一标识符。在这个例子中,有两个进程,进程ID分别是4775和16083。
TTY: 终端类型,表示进程是在哪个终端上运行的。pts/1 表示这是一个伪终端(pseudo-terminal slave),通常用于图形界面下的终端模拟器或者SSH会话。这里的两个进程都在pts/1上运行,意味着它们共享同一个终端窗口。
TIME: CPU时间,表示进程占用的CPU时间。这里显示的是00:00:00,意味着这两个进程到目前为止还没有占用明显的CPU时间,或者它们刚刚开始运行。
CMD: 命令名,表示启动进程的命令。在这个例子中,PID为4775的进程是由bash命令启动的,这是一个常用的命令行界面程序。PID为16083的进程是由ps命令启动的,ps命令用于显示当前系统中的进程状态。
总结来说,这个输出显示了两个进程的信息:一个是bash进程,它可能是一个命令行会话;另一个是ps进程,它是因为用户执行了ps命令来查看当前进程列表而被创建的。由于ps命令的执行非常短暂,所以它的CPU时间显示为00:00:00。

1) ps -ef

-e选项 代表显示系统内的所有进程信息。
-f选项 用于产生完整的格式输出。这个组合可以列出非常详细的进程信息,包括进程的 UID(用户 ID)、PID(进程 ID)、PPID(父进程 ID)、C(进程使用的 CPU 时间百分比)、STIME(进程启动时间)、TTY(进程相关的终端设备)、TIME(进程使用的 CPU 时间总和)以及 CMD(启动进程的命令名称)等。

~$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 Aug21 ?        00:00:12 /sbin/init auto noprompt
root           2       0  0 Aug21 ?        00:00:00 [kthreadd]
root           3       2  0 Aug21 ?        00:00:00 [rcu_gp]
root           4       2  0 Aug21 ?        00:00:00 [rcu_par_gp]
root           5       2  0 Aug21 ?        00:00:00 [slub_flushwq]
root           6       2  0 Aug21 ?        00:00:00 [netns]
root           8       2  0 Aug21 ?        00:00:00 [kworker/0:0H-events_highpri]
root          10       2  0 Aug21 ?        00:00:00 [mm_percpu_wq]
root          11       2  0 Aug21 ?        00:00:00 [rcu_tasks_rude_]
root          12       2  0 Aug21 ?        00:00:00 [rcu_tasks_trace]
root          13       2  0 Aug21 ?        00:00:00 [ksoftirqd/0]
root          14       2  0 Aug21 ?        00:00:16 [rcu_sched]
root          15       2  0 Aug21 ?        00:00:01 [migration/0]
root          16       2  0 Aug21 ?        00:00:00 [idle_inject/0]
root          18       2  0 Aug21 ?        00:00:00 [cpuhp/0]
root          19       2  0 Aug21 ?        00:00:00 [cpuhp/1]
root          20       2  0 Aug21 ?        00:00:00 [idle_inject/1]
root          21       2  0 Aug21 ?        00:00:01 [migration/1]
root          22       2  0 Aug21 ?        00:00:00 [ksoftirqd/1]

2) ps aux

a选项 表示显示所有与终端相关或无关的进程。
u选项 用于显示进程的详细用户信息。
x选项 显示没有控制终端的进程。此命令会显示更详细的信息,包括 USER(进程所有者的用户名)、PID、%CPU(进程占用的 CPU 百分比)、%MEM(进程占用的内存百分比)、VSZ(进程使用的虚拟内存大小,单位为 KB)、RSS(进程使用的物理内存大小,单位为 KB)、STAT(进程的状态,如 R 表示运行中,S 表示睡眠,D 表示不可中断的睡眠等)、START(进程的启动时间)、TIME(进程累计使用的 CPU 时间)、COMMAND(启动进程的命令)等。

~$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 169544 12768 ?        Ss   Aug21   0:12 /sbin/init auto noprompt
root           2  0.0  0.0      0     0 ?        S    Aug21   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Aug21   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Aug21   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   Aug21   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   Aug21   0:00 [netns]
root           8  0.0  0.0      0     0 ?        I<   Aug21   0:00 [kworker/0:0H-events_highp
root          10  0.0  0.0      0     0 ?        I<   Aug21   0:00 [mm_percpu_wq]
root          11  0.0  0.0      0     0 ?        S    Aug21   0:00 [rcu_tasks_rude_]
root          12  0.0  0.0      0     0 ?        S    Aug21   0:00 [rcu_tasks_trace]
root          13  0.0  0.0      0     0 ?        S    Aug21   0:00 [ksoftirqd/0]
root          14  0.0  0.0      0     0 ?        I    Aug21   0:16 [rcu_sched]
root          15  0.0  0.0      0     0 ?        S    Aug21   0:01 [migration/0]
root          16  0.0  0.0      0     0 ?        S    Aug21   0:00 [idle_inject/0]
root          18  0.0  0.0      0     0 ?        S    Aug21   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    Aug21   0:00 [cpuhp/1]

用途

1. 监控系统进程:管理员可以通过ps命令随时了解系统中正在运行的进程情况,以便及时发现异常进程,如占用过多 CPU 或内存的进程。例如,如果发现某个未知进程占用了大量 CPU 资源,可以进一步调查该进程的来源和用途,判断是否是恶意程序或存在程序错误。
2. .查找特定进程:当需要查找某个特定程序的进程 ID 以便进行操作(如终止进程)时,可以使用ps命令。比如,要查找名为firefox的浏览器进程,可以使用ps aux | grep firefox,它会列出所有包含firefox关键字的进程信息,然后可以根据 PID 进行进一步操作。
举例查找名为bash的浏览器进程

~$ ps aux | grep bash
zzq         3928  0.0  0.0  10616  4832 pts/0    Ss+  Aug21   0:00 bash
zzq         4775  0.0  0.0  10636  5040 pts/1    Ss   Aug21   0:00 -bash
zzq        16098  0.0  0.0   9040   720 pts/1    S+   08:20   0:00 grep --color=auto bash

3. 分析系统性能:通过观察进程的 CPU 和内存使用情况,可以分析系统性能瓶颈。如果多个进程都出现高 CPU 使用率,可能意味着系统负载过高,需要考虑升级硬件或优化程序。如果某些进程的内存使用不断增长且不释放,可能存在内存泄漏问题,需要对相关程序进行检查和修复。

kill

kill 命令用于终止正在运行的进程。在Linux和Unix系统中,每个进程都有一个唯一的进程ID(PID),kill 命令通过指定进程ID来向指定进程发送信号,以达到终止进程的目的。

kill [options] PID

PID:要终止的进程的进程ID。
options:可选参数,用于指定发送的信号类型或控制行为。

1) -9 或 --kill

发送强制终止信号(SIGKILL),立即终止目标进程。这是一种强制的终止方式,但可能会导致未保存数据丢失。

kill -9 PID  

2) -15 或 --terminate

-15 或 --terminate:发送终止信号(SIGTERM),请求目标进程优雅地退出。通常情况下,进程可以捕获这个信号并执行清理操作后自行退出。默认啥都不加就等于是15。

 kill -15 PID  # = kill PID

3) kill -l

-l:列出所有可用的信号名称。

kill -l
~$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

信号类型

SIGTERM(15):默认发送的终止信号,通常用于请求进程正常退出。
SIGKILL(9):强制终止信号,立即终止进程,无法被阻塞或忽略。

终止进程ID为 1234 的进程:

kill 1234   #或者kill -15 1234

强制终止进程ID为 5678 的进程:

kill -9 5678

使用场景

1. 结束僵尸进程: 僵尸进程是已经终止但其父进程未能正确处理终止状态的进程。可以使用 kill 命令将僵尸父进程终止并清理掉。

2. 关闭异常进程: 当某个进程消耗过多资源或者表现异常时,可以使用 kill 命令终止它,以恢复系统的正常运行。

3. 进程管理: 在系统管理和运维中,kill 命令是管理进程生命周期的重要工具,能够有效地管理和控制进程的行为。

父进程/子进程

 ~$ ps -ef |grep zzq
zzq         1865       1  0 Aug21 ?        00:00:01 /lib/systemd/systemd --user
zzq         1866    1865  0 Aug21 ?        00:00:00 (sd-pam)
zzq         1871    1865  0 Aug21 ?        00:00:08 /usr/bin/pulseaudio --daemonize=no --log-target=journal
zzq         1873    1865  0 Aug21 ?        00:00:00 /usr/libexec/tracker-miner-fs
zzq         1876    1865  0 Aug21 ?        00:00:02 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only

1.1865进程编号是zzq的master进程或者说主进程,它的父进程是1号进程,这个1号进程理解就是操作系统(普通的业务进程的父进程都应该是1号进程)。

2.1866和1871等进程编号是zzq的work进程,它的父进程就是zzq的master进程,反之他们就是1865的子进程。

总结

1.ps 命令讲到的2个常用参数实际上是两种操作习惯或者风格,99%的的问题使用他们是没有区别的。

2.无论是哪个用法,他们都会显示所有的进程,我们基本上都需要通过我们前面在Linux-搜索命令(二)的grep来进行过滤,过滤的选项可以是进程名字,也可用启动命令等。

3.kill命令主要作用是杀死进程,其实还有个选项,-2 这个需要应用程序支持这个信号才可以支持,它才可以最优雅关闭进程。

4.kill虽然可以一次杀死多个进程(kill pid1 pid2 pid3 …),但是其实还有一个pkill的命令可以杀死一类进程,可以提高效率。

5.其实还有部分进程是无法通过kill -9 杀死的,在Linux里面叫不可中断睡眠进程

参考

笔记记录与实际操作。原文请看https://mp.weixin.qq.com/s/DeIizNLmI6WznucViM6UPw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternal-Student

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值