【Linux命令】如何查看和结束进程?

目录

1、探查进程:ps 命令

2、实时监测进程:top 命令

3、结束进程:kill 命令和 killall 命令


        当程序运行在系统上时,我们称之为进程(process)。想监测这些进程,需要熟悉Linux中一些监测程序命令的用法。

1、探查进程:ps 命令

        ps 命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息。遗憾的是,随着它的稳健而来的还有复杂性——有数不清的参数,这或许让 ps 命令成了最难掌握的命令大多数系统管理员在掌握了能提供他们需要信息的一组参数之后,就一直坚持只使用这组参数//命令的掌握不在于要掌握所有的细节,重点在于真实有用

        默认情况下,ps 命令并不会提供那么多的信息:

[root@localhost ~]# ps
   PID TTY          TIME CMD
 84277 pts/1    00:00:00 bash
 86341 pts/1    00:00:00 ps

        默认情况下,ps 命令只会显示运行在当前控制台下的属于当前用户的进程。在此例中,我们只运行了 bash shell (注意,shell 也只是运行在系统上的另一个程序而已) 以及 ps 命令本身。

        上例中的基本输出显示了程序的进程 ID(Process ID,PID)、它们运行在哪个终端(TTY)以及进程已用的 CPU 时间。

        使用 ps 命令的关键不在于记住所有可用的参数,而在于记住最有用的那些参数。大多数 Linux 系统管理员都有自己的一组参数,他们会牢牢记住这些用来提取有用的进程信息的参数。举个例子,如果你想查看系统上运行的所有进程,可用 -ef 参数组合://ps命令之前有两个版本,为了避免这种复杂性,记住常用的就可以了

        这个例子用了两个参数:-e 参数指定显示所有运行在系统上的进程;-f 参数则扩展了输
出,这些扩展的列包含了以下有用的信息。

  • UID:启动这些进程的用户。
  • PID:进程的进程 ID。
  • PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
  • C:进程生命周期中的 CPU 利用率。
  • STIME:进程启动时的系统时间。
  • TTY:进程启动时的终端设备。
  • TIME:运行进程需要的累计 CPU 时间。
  • CMD:启动的程序名称。

        上例中输出了合理数量的信息,这也正是大多数系统管理员希望看到的。

2、实时监测进程:top 命令

        ps 命令虽然在收集运行在系统上的进程信息时非常有用,但也有不足之处:它只能显示某个特定时间点的信息。如果想观察那些频繁换进换出的内存的进程趋势,用 ps 命令就不方便了。

        而 top 命令刚好适用这种情况。top 命令跟 ps 命令相似,能够显示进程信息,但它是实时显示的。下图是 top 命令运行时输出的截图:

        输出的第一部分显示的是系统的概况:

        第一行显示了当前时间系统的运行时间登录的用户数以及系统的平均负载

        平均负载有 3 个值:最近 1 分钟的、最近 5 分钟的和最近 15 分钟的平均负载。值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近 1 分钟的高负载值也很常见,但如果近 15 分钟内的平均负载都很高,就说明系统可能有问题。

        第二行显示了进程概要信息——top 命令的输出中将进程叫作任务( task ):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

        第三行显示了 CPU 的概要信息。top 根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将 CPU 利用率分成几类输出。

        紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配了的话)的状态而言的。

        最后一部分显示了当前运行中的进程的详细列表,有些列跟 ps命令的输出类似。

  • PID:进程的ID。
  • USER:进程属主的名字。
  • PR:进程的优先级。
  • NI:进程的谦让度值。
  • VIRT:进程占用的虚拟内存总量。
  • RES:进程占用的物理内存总量。
  • SHR:进程和其他进程共享的内存总量。
  • S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
  • %CPU:进程使用的CPU时间比例。
  • %MEM:进程使用的内存占可用内存的比例。
  • TIME+:自进程启动到目前为止的CPU时间总量。
  • COMMAND:进程所对应的命令行名称,也就是启动的程序名。

        默认情况下,top 命令在启动时会按照 %CPU 值对进程排序。可以在 top 运行时使用多种交互命令重新排序。每个交互式命令都是单字符,在 top 命令运行时键入可改变 top 的行为。键入 f 允许你选择对输出进行排序的字段,键入 d 允许你修改轮询间隔。键人 q 可以退出 top。用户在 top 命令的输出上有很大的控制权。//细节参数请参阅bash手册

        用这个工具就能经常找出占用系统大部分资源的罪魁祸首。当然了,一旦找到,下一步就是结束这些进程。下边,我们来看一下,在 linux 中如何结束一个进程。

3、结束进程:kill 命令和 killall 命令

        在 Linux 中,进程之间通过信号来通信。进程的信号就是预定义好的一个消息,进程能识别它并决定忽略还是作出反应。进程如何处理信号是由开发人员通过编程来决定的。大多数编写完善的程序都能接收和处理标准 Unix 进程信号。

        这些信号都列在了下表中:

信号名称描述
1HUP挂起
2INT中断
3QUIT结束运行
9KILL无条件终止
11SEGV段错误
15TERM尽可能终止
17STOP无条件停止运行,但不终止
18TSTP停止或暂停,但继续在后台运行
19CONT在STOP或TSTP之后恢复执行

        在 Linux 上有两个命令可以向运行中的进程发出进程信号。

        kill 命令

        kill 命令可通过进程 ID(PID) 给进程发信号。默认情况下,kill 命令会向命令行中列出的全部 PID 发送一个 TERM 信号。//注意kill只能用进程的 PID 而不能用程序名

        要发送进程信号,你必须是进程的属主或登录为 root 用户。

        TERM 信号告诉进程可能的话就停止运行。不过,如果有不服管教的进程,那它通常会忽略
这个请求。如果要强制终止,-s 参数支持指定其他信号(用信号名或信号值)。

        你能从下例中看出,kill 命令不会有任何输出。

[root@localhost ~]# kill -s HUP 12089
#

        要检查 kill 命令是否有效,可再运行 ps 或 top 命令,看看问题进程是否已停止

        killall 命令

        killall 命令非常强大,它支持通过进程名而不是 PID 来结束进程。killall 命令也支持通配符,这在系统因负载过大而变得很慢时很有用。

[root@localhost ~]# killall http*
#

        上例中的命令结束了所有以 http 开头的进程,比如 Apache Web 服务器的 httpd 服务。

        警告:以 root 用户身份登录系统时,使用 killall 命令要特别小心,因为很容易就会误用通配符而结束了重要的系统进程。这可能会破坏文件系统。

        至此,全文结束。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

swadian2008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值