10-2 控制进程

作者: 見贤思齊_ | 来源:发表于2020-08-04 15:19 被阅读0次

    二、控制进程

    现在已经知道了如何查看和监控进程,接下来见识一下如何对进程进行控制。

    将使用一个名为 xlogo 的程序作为实验对象。

    0.xlogo

    (1)是什么?

    xlogo 程序是由 X 窗口系统(使得显示器支持图形化界面的底层引擎)提供的一个示例程序,它只是简单地显示一个包含 X 标识的可缩放窗口

    (2)怎么做?

    ① 语法格式

    xlogo

    xlogo.png

    输入该命令后,包含 X 标识的一个小窗口将在屏幕的某个地方出现。

    (3)注意

    • 有些系统中,xlogo 可能会输出一条警告信息,但是我们可以忽略它,因为它并不会造成什么影响。
    • 如果系统中不包含 xlogo 程序,那么请尝试使用 gedit 程序 或 kwrite 程序来替代。

    (4)判断xlogo是否在运行

    可以通过改变窗口大小来验证 xlogo 是否处于运行状态。

    如果该标识适应新的窗口大小被重新绘制了,则表明该程序正在运行

    ① 为何shell提示符未返回?

    你可能会发现,为什么在这里 shell 提示符没有返回呢?

    这是因为 shell 提示符正等待该 xlogo 程序结束,就像之前使用的其它程序一样。如果关闭 xlogo 窗口,那么提示符将返回

    1.中断进程

    (1)Ctrl-C

    ① 作用

    在终端里按下 Ctrl-C 键将会中断一个程序,它意味着我们委婉地请求程序结束

    按下 Ctrl-C 键后,xlogo 窗口将关闭,shell提示符将返回。

    Ⅰ.示例

    让我们再次运行 xlogo 程序,观察一下会发生什么。

    首先,输入 xlogo 命令,并确保程序在正常运行;接着,返回到终端窗口,按下Ctrl-C键。

    xlogo中断Ctrl-C.png

    2.&-使进程在后台运行

    假设我们想要 shell 提示符返回,但又不终止 xlogo 程序,那么可以通过让该程序在后台运行来实现。

    (1)后台是什么?

    我们可以把终端想象为:有一个前台(表面可见的内容,比如说:shell 提示符)和一个后台(隐藏在表层之下的内容)。

    后台运行进程不会受到任何键盘输入的影响,包括试图用来中断它的 Ctrl-C 键。

    (2)怎么做?

    要想在启动程序时让程序在后台运行,可以在命令后面加上 &(和号字符)来实现。

    ① 语法格式

    命令 &

    Ⅰ.示例xlogo后台运行
    xlogo &
    
    &后台运行示例.png

    (3)作业控制(job control)

    xlogo & 命令执行后,将出现 xlogo 窗口,而且shell提示符也将返回,但是同时也会打印一些有趣的数字信息

    这条信息是 shell 的一个称为作业控制的特性表现。

    Shell 通过这条信息来显示已经启动的作业编号为 1 ([1]),其对应的PID是4514。

    如果执行 ps 命令可以查看当前运行的进程,

    ps
    
    作业控制示例.png

    (4)jobs命令

    Shell的作业控制特性也提供了一种方式来查看从终端提供的所有作业。使用 jobs 命令可以得到如下列的信息。

    jobs
    
    jobs命令示例.png

    输出结果显示存在一个编号为 1 的作业在运行,而且对应命令是 xlogo &。

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

    后台运行进程不会受到任何键盘输入的影响,包括试图用来中断它的 Ctrl-C 键

    要想使得进程返回到平台来运行,可以使用 fg 命令来实现,参见下面例子:

    (1)语法格式

    fg [参数]

    '''
     功能: 使后台中运行的进程回到前台运行。
    
     参数: 
     ① %作业编号 : fg后加上jobspec选项,来指定使哪一个进程回到前台运行。
     (注: 如果后台只有一个任务,那么可以不带 jobspec选项)
     选项:
    
     返回值:
    '''
    
    ① jobspec选项

    fg后加上百分号和作业编号,称为 jobspec选项

    如果后台只有一个任务,那么可以不带 jobspec选项

    ② 示例
    jobs 
    # 查看从终端提供的所有作业
    ​
    fg %1
    # 百分号和作业编号(即 jobspec选项),来指定使作业编号为 1 的进程回到前台运行。
    
    fg命令示例.png

    这个时候,按下 Ctrl-C 键就可以终止 xlogo 命令。

    4.停止(暂停)进程

    如果我们只是想要暂停进程,而不是终止进程,那么通常需要我们将前台运行的进程移到后台去运行

    (1)Ctrl-Z中止进程

    在 Linux 中,我们为了暂停前台进程,需要按下 Ctrl-Z 键,就可以将进程暂停。

    (注意:此时此任务并没有结束,仍然在进程中它只是维持挂起(即暂停)的状态。用户可以使用 fg 或 bg 命令操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行。在使用 fg 命令的时候,如果只存在一个作业,那么可以不带 jobspec 选项。)

    ① 示例

    让我们试试如下操作,在命令提示符后输入 xlogo,按下 Enter 键后再按下 Ctrl-Z ,就可以将进程停止(暂停)。

    xlogo
    ​
    # 按下 Enter 键后再按下 Ctrl-Z,就可以暂停进程。
    
    xlogo通过Ctrl-Z暂停.png

    在暂停 xlogo 命令后,我们可以通过试图改变 xlogo 窗口的大小来确认该程序是否真正被暂停了。可以发现,该进程看起来好像死了(x不会随着窗口大小自适应)。这个时候我们可以使用 fg 命令让进程在前台恢复运行也可以使用 bg 命令让进程移到后台运行

    (2)bg-使进程在后台运行

    ① 语法格式

    bg [参数]

    ''
     功能: 让进程移到后台运行。
     (该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。)
    ​
    
     参数: 
     ① 作业编号: 指定需要放到后台的作业标识号。
     (如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。
    这1点和fg命令是相同的)
    ​
     选项:
    
     返回值:
    '''
    
    ② 示例

    Ⅰ.

    将任务号为1的任务放到后台继续执行.

    bg 1
    ​
    bg %1
    
    bg命令示例.png

    (3)忘记在命令尾部加上&符号

    如果用命令方式启动了一个图形化程序(比如:xlogo),但是忘记了在命令尾部加上符号“ & ”来让程序在后台运行,那么在这种情况下,使用 bg 命令把进程从前台移到后台去运行方法将非常方便

    (4)为什么想要通过命令行方式来启动一个图形化程序呢?

    原因有两个:

    • 首先,想要运行的程序可能并不在窗口管理器的菜单中,比如 xlogo 程序。
    • 其次,从命令行启动程序可以看到用图形化方式启动程序所看不到的错误信息。有时候从图形菜单中启动程序,程序会启动失败。但改用命令行方式启动的话,就可以得到错误提示信息,找到问题所在。另外一些图形化程序也包含很多有意思和有用的命令行选项

    相关文章

      网友评论

        本文标题:10-2 控制进程

        本文链接:https://www.haomeiwen.com/subject/wsvbrktx.html