欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

1-10:学习shell之进程

发布时间:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 1-10:学习shell之进程 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 前言
  • 一:进程如何工作
    • (1)使用ps命令查看进程信息
    • (2)使用top命令查看资源管理器
  • 二:控制进程
    • (1)中断进程
    • (2)使进程在后台运行
    • (3)fg-使进程回到前台运行
    • (4)暂停进程
  • 三:信号
      • A:使用kill命令发送信号到进程
      • B:使用killall命令发送信号给多个进程

前言

进程可以说是Linux中非常重要的概念了,关于进程一些核心概念大家可以移步,在这篇文章中详细查看

Linux进程

本章需要用到的命令如下

  • ps:显示当前所有进程的运行情况
  • top:相当于资源管理器
  • jobs:列出所有活动作业的状态信息
  • bg:设置在后台中运行作业
  • fg:设置在前台中运行作业
  • kill:发送信号给某个进程
  • killall:杀死指定名字的进程
  • shutdown:关机或重启系统

一:进程如何工作

系统启动时,内核先把它的一些程序初始化为进程,然后运行一个称为init的程序。init程序依次运行一系列称为脚本初始化(init script)的shell脚本(存放于etc目录下),这些脚本将会启动所有系统服务。其中的很多服务都是通过守护程序(daemon program)来实现的。而后台程序只是呆在后台做他们自己的事情,并且没有用户界面。所以即使用户没有登录,系统也在忙于执行一些例行程序

内核会保存每个进程的信息以便确保任务有序进行,比如每个进程都将分配一个称为进程ID(PID)的号码。进程ID是按照递增的顺序分配的,init进程始终是1。

(1)使用ps命令查看进程信息

如果直接输入ps命令,将会输出和当前终端会话相关的进程信息

  • TTY代表了进程的控制终端
  • TIME表示了进程消耗CPU的时间总和

如果在ps后面跟上选项x,也就是ps x,表示告知ps命令显示所有的进程无需关注他们是由哪个终端控制的(因为有可能有多个用户在使用电脑,所以TTY显示为问号)

  • 上图中,多列出一个选项STAT,它是state的缩写,表示了进程状态。关于进程状态我在前言的那篇文章中也做了深入的探究。

    还有一个常用的选项是aux,也就是ps aux,该选项会输出每个用户的进程信息,并且输出的信息更加丰富
  • 上图中,列表标题的含义如下

(2)使用top命令查看资源管理器

top命令相较于ps命令而言,top可以动态显示进程的信息,默认每3s更新一次
它主要查看的是最高进程的运行状况

  • 整张图分为两个部分,上半部分显示的是系统总体状态信息,下半部分显示的是一张按照CPU活动排序的进程情况表

其中系统总体状态信息显示的内容非常有用,主体注解与参考如下(标号对应)


top命令类似于Windows中的资源管理器,但是它是由于资源管理器的,大家可能有这样的体会,一打开资源管理器CPU的占用率就会直线上升。

二:控制进程

为了方便演示,我们在终端中输入xlogo,xlogo是由X窗口系统提供的一个实例程序,它简单地显示了一个包含X标识的可缩放窗口

(1)中断进程

X窗口打开的情况下,可以发现终端的shell提示符并没有返回,那是因为这个进程正在运行当中。如果在终端中输入Ctrl+C,那么这个进程将会被终端,并且shell提示符返回

  • 需要注意后台进程是无法用这种方式终端的,这一点后面会讲到

(2)使进程在后台运行

可以发现在xlogo运行期间,我们是无法对终端进行其他操作的,所以如果想要让进程不要在前台运行,可以在命令后面加入&,也即是xlogo &,这样的话进程将会转到后台运行,效果就是我们仍然能在终端中输入其他命令

大家还可以发现另外有趣的一点:当把输入xlogo &后,终端显示了【1】4467这样的字样,这种表现其实专业术语叫做shell的作业控制,转到后台后,shell会告诉你已经启动作业编号【1】,对应PID为4467

如果输入ps命令,可以发现除了前面讲过的那两条基本进程外,此时还多了一个咋们刚才转到后台运行的xlogo进程,而且其PID恰好就是4467

如果想要查看由该终端启动的所有作业(也就是后台进程),可以输入jobs

(3)fg-使进程回到前台运行

后台运行的程序是无法使用Ctrl+C中断的。如果要使得后台进程转到前台运行,可以使用fg命令,在fg后面加上百分号和作业编号,也就是fg %1

(4)暂停进程

前台启动xlogo后,如果此时按下Ctrl+Z,那么进程将被暂停,同时终端提示已停止,该进程会被转到后台

三:信号

使用kill命令可以杀死一个进程,尤其是杀死那些不正常的拒绝终止的程序

但是kill命令的用法并不只是这么简单,准确点来说kill的含义是发送信号给进程,使用kill -l可以发现kill可以发送的信号有这么多

A:使用kill命令发送信号到进程

kill的基本用法就是kill -信号代码 PID
众多信号中,最为常用的是以下几种

  • 需要注意kill -9,这种终止进程的方式属于“无奈之举”,当进程以这种方式被终止时,它将没有机会对自己进行清理或保存工作。下面的这张漫画很形象的说明了它

B:使用killall命令发送信号给多个进程

使用killall命令可以给指定程序或者指定用户名的多个进程发送信号,格式为killall -user -signal name

总结

以上是生活随笔为你收集整理的1-10:学习shell之进程的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。