如何在linux上运行和控制后台进程

在Linux中使用bashshell来管理前台和后台进程。您可以使用Bash的作业控制函数和信号,使您能够更灵活地运行命令。我们教你怎么做。...

在Linux中使用bashshell来管理前台和后台进程。您可以使用Bash的作业控制函数和信号,使您能够更灵活地运行命令。我们教你怎么做。

所有关于流程

每当一个程序在Linux或类似Unix的操作系统中执行时,就会启动一个进程。“进程”是计算机内存中执行程序的内部表示形式的名称。每个活动程序都有一个过程。事实上,在你的计算机上运行的几乎所有东西都有一个进程。这包括图形桌面环境(GDE)的组件,如GNOME或KDE,以及启动时启动的系统守护进程。

为什么几乎所有的东西都在运行?嗯,Bash内置的cd、pwd和alias在运行时不需要启动(或“派生”)进程。Bash在终端窗口中运行的bashshell实例中执行这些命令。这些命令之所以快速,正是因为它们不需要启动进程就可以执行。(您可以在终端窗口中键入help以查看Bash内置的列表。)

进程可以在前台运行,在这种情况下,它们会接管您的终端,直到它们完成为止,也可以在后台运行。在后台运行的进程不会控制终端窗口,您可以继续在其中工作。或者至少,如果它们不生成屏幕输出,就不会控制终端窗口。

一个混乱的例子

我们将开始一个简单的ping跟踪运行。我们要ping How to Geek域。这将作为前台进程执行。

ping www.tl80.cn

如何在linux上运行和控制后台进程

我们得到预期的结果,向下滚动终端窗口。ping正在运行时,无法在终端窗口中执行其他操作。要终止命令,请按Ctrl+C。

Ctrl+C

如何在linux上运行和控制后台进程

屏幕截图中突出显示了Ctrl+C的可见效果。平做了一个简短的总结,然后停了下来。

让我们重复一遍。但这次我们将按Ctrl+Z而不是Ctrl+C。任务不会终止。这将成为一项背景任务。我们控制了返回给我们的终端窗口。

ping www.tl80.cn Ctrl+Z

如何在linux上运行和控制后台进程

点击Ctrl+Z的可见效果在屏幕截图中突出显示。

这一次,我们被告知进程停止了。停止并不意味着终止。就像一辆停在停车标志处的汽车。我们还没有把它报废扔掉。它还在路上,静止不动,等着走。这个过程现在是一个后台作业。

jobs命令将列出当前终端会话中已启动的作业。因为作业是(不可避免的)进程,我们也可以使用ps命令来查看它们。让我们使用这两个命令并比较它们的输出。我们将使用T选项(terminal)选项只列出在这个terminal窗口中运行的进程。请注意,不需要使用连字符-with-T选项。

jobs ps T

如何在linux上运行和控制后台进程

jobs命令告诉我们:

  • [1] :方括号中的数字是作业编号。当我们需要用作业控制命令来控制它时,我们可以使用它来引用作业。
  • +:加号+表示如果使用没有特定作业编号的作业控制命令,将对该作业执行操作。它被称为默认作业。默认作业始终是最近添加到作业列表中的作业。
  • 已停止:进程未运行。
  • 发出砰的声响www.tl80.cn:启动进程的命令行。

ps命令告诉我们:

  • PID:进程的进程ID。每个进程都有一个唯一的ID。
  • TTY:执行进程的伪电传打字机(终端窗口)。
  • STAT:进程的状态。
  • 时间:进程消耗的CPU时间量。
  • 命令:启动进程的命令。

以下是STAT列的常用值:

  • D:不间断睡眠。进程处于等待状态,通常等待输入或输出,不能被中断。
  • I:闲置。
  • R:跑步。
  • S:可中断睡眠。
  • T:被作业控制信号停止。
  • Z:僵尸程序。进程已终止,但尚未被其父进程“清除”。

STAT列中的值后面可以跟有以下附加指标之一:

  • <:高优先级任务(对其他进程不好)。
  • N:低优先级(对其他进程很好)。
  • L:进程将页锁定到内存中(通常由实时进程使用)。
  • 学生:一个课长。会话负责人是启动了流程组的流程。shell是会话领导者。
  • l:多线程进程。
  • +:前台进程。

我们可以看到Bash的状态是Ss。大写的“S”告诉我们bashshell正在休眠,它是可中断的。一旦我们需要它,它就会回应。小写的“s”告诉我们shell是会话的前导。

ping命令的状态为T。这告诉我们ping已被作业控制信号停止。在本例中,我们使用Ctrl+Z将其置于背景中。

ps T命令的状态为R,表示running。+表示此进程是前台组的成员。因此ps T命令正在前台运行。

bg命令

bg命令用于恢复后台进程。它可以与工号一起使用,也可以不与工号一起使用。如果使用它时没有作业编号,则默认作业将显示在前台。进程仍在后台运行。您不能向它发送任何输入。

如果发出bg命令,我们将恢复ping命令:

bg

如何在linux上运行和控制后台进程

ping命令继续,我们再次在终端窗口中看到滚动输出。将为您显示已重新启动的命令的名称。这在屏幕截图中突出显示。

如何在linux上运行和控制后台进程

但我们有个问题。任务正在后台运行,不接受输入。那我们怎么阻止呢?Ctrl+C什么都不做。我们可以看到它时,我们键入它,但后台任务没有收到这些击键,所以它一直在愉快地ping远离。

如何在linux上运行和控制后台进程

事实上,我们现在处于一种奇怪的混合模式。我们可以在终端窗口中键入内容,但是ping命令的滚动输出会很快将我们键入的内容清除掉。我们键入的任何内容都会在早期生效。

为了停止我们的后台任务,我们需要把它放到前台,然后停止它。

fg命令

fg命令将把后台任务带入前台。就像bg命令一样,它可以与作业编号一起使用,也可以不与作业编号一起使用。将其与作业编号一起使用意味着它将对特定作业进行操作。如果使用时没有作业编号,则使用发送到后台的最后一个命令。

如果我们键入fg,ping命令将被带到前台。我们键入的字符与ping命令的输出混合在一起,但是shell对它们进行操作,就好像它们像往常一样在命令行中输入一样。事实上,从bashshell的角度来看,这正是所发生的事情。

fg

如何在linux上运行和控制后台进程

现在ping命令再次在前台运行,我们可以使用Ctrl+C来终止它。

Ctrl+C

如何在linux上运行和控制后台进程

我们需要发出正确的信号

那可不太好。显然,当进程不产生输出且不需要输入时,在后台运行进程效果最好。

但是,不管是不是混乱,我们的例子确实做到了:

  • 把一个过程放到后台。
  • 在后台将进程恢复到运行状态。
  • 将进程返回前台。
  • 正在终止进程。

当您使用Ctrl+C和Ctrl+Z时,您正在向进程发送信号。这些是使用kill命令的简写方法。kill可以发送64种不同的信号。在命令行中使用kill-l列出它们。杀戮不是这些信号的唯一来源。其中一些由系统中的其他进程自动引发

这里有一些常用的。

  • 信号1。当正在运行的终端关闭时自动发送到进程。
  • 信号:信号2。发送到您按Ctrl+C的进程。进程被中断并被告知终止。
  • 信号3。如果用户发送退出信号Ctrl+D,则发送到进程。
  • 信号9。进程将立即终止,并且不会尝试干净地关闭。这个过程并不顺利。
  • 信号终端:信号15。这是kill发送的默认信号。它是标准的程序终止信号。
  • SIGTSTP:信号20。使用Ctrl+Z时发送到进程。它停止进程并将其置于后台。

我们必须使用kill命令来发出没有指定组合键的信号。

进一步的作业控制

通过使用Ctrl+Z移到后台的进程被置于stopped状态。我们必须使用bg命令重新启动它。作为正在运行的后台进程启动程序很简单。在命令行末尾附加一个与号。

尽管后台进程最好不要写入终端窗口,但我们将使用这样做的示例。我们需要在截图中有一些我们可以参考的东西。此命令将作为后台进程启动一个无休止的循环:

而true;do echo“How To Geek Loop Process”;sleep 3;done&amp;

如何在linux上运行和控制后台进程

我们被告知进程的作业编号和进程ID。我们的作业编号是1,进程id是1979。我们可以使用这些标识符来控制这个过程。

无穷循环的输出开始出现在终端窗口中。和以前一样,我们可以使用命令行,但是我们发出的任何命令都会与循环进程的输出交错在一起。

长征

如何在linux上运行和控制后台进程

为了停止我们的进程,我们可以使用jobs来提醒自己job编号是多少,然后使用kill。

jobs报告我们的流程是job number 1。要将这个数字与kill一起使用,我们必须在它前面加一个百分号%。

jobs kill %1

如何在linux上运行和控制后台进程

kill将SIGTERM信号(信号编号15)发送到进程并终止。下次按下回车键时,将显示作业的状态。它将进程列为“已终止”。如果进程不响应kill命令,则可以将其提升一个级别。将kill与SIGKILL一起使用,信号号9。把数字9放在kill命令和作业号之间。

kill 9 %1

我们讨论过的事情

  • Ctrl+C:如果进程正在接受输入,则向进程发送SIGINT,即信号2,并告诉它终止。
  • Ctrl+D:如果进程正在接受输入,则向进程发送SISQUIT,信号3,并告诉它退出。
  • Ctrl+Z:将SIGSTP(信号20)发送到进程,并告诉它停止(挂起)并成为后台进程。
  • 作业:列出背景作业并显示其作业编号。
  • bg作业编号:重新启动后台进程。如果不提供作业编号,则使用最后一个转换为后台任务的进程。
  • fg job\ u number:将后台进程带入前台并重新启动它。如果不提供作业编号,则使用最后一个转换为后台任务的进程。
  • commandline&:在命令行的末尾添加一个与号&作为正在运行的后台任务执行该命令。
  • kill%job\u number:向进程发送SIGTERM信号15以终止它。
  • kill 9%job\u number:向进程发送SIGKILL,信号9,并突然终止它。

相关:如何从Linux终端终止进程

  • 发表于 2021-04-03 03:30
  • 阅读 ( 224 )
  • 分类:互联网

你可能感兴趣的文章

如何控制linux启动服务和守护进程

...许多应用程序,您甚至可能不知道这些应用程序。下面是如何控制它们。 ...

  • 发布于 2021-03-15 11:22
  • 阅读 ( 214 )

如何在带屏幕的linux终端上进行多任务处理

... 如何安装屏幕 ...

  • 发布于 2021-03-21 22:09
  • 阅读 ( 191 )

linux命令参考备忘单

...便的Linux命令备忘单。如果您想运行其中的几个,请查看如何在带屏幕的Linux终端上执行多任务。 ...

  • 发布于 2021-03-22 04:06
  • 阅读 ( 229 )

linux中的进程是什么?

... 流程如何开始 ...

  • 发布于 2021-03-27 02:21
  • 阅读 ( 234 )

为什么ram助推器和任务杀手对android不好

... android如何使用ram ...

  • 发布于 2021-03-30 19:11
  • 阅读 ( 345 )

如何在linux上杀死僵尸进程

...好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。 进程状态如何在linux上工作 当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内...

  • 发布于 2021-04-01 07:47
  • 阅读 ( 233 )

如何在启动时用systemd运行linux程序

...建集成服务的过程,甚至与杂志进行对话。 本教程演示如何设置启动系统时启动的系统服务。要在登录时启动图形程序,请改用桌面的启动管理器。 启动时运行程序 有时,您在计算机上安装的软件会将自己连接到Linux启动过...

  • 发布于 2021-04-01 17:43
  • 阅读 ( 279 )

如何使用linux的screen命令

...窗口推到后台(称为“分离”)。当你想看到你的进程是如何进行的,你可以把窗口拉到前台(“重新连接”)并再次使用它。这对于您不希望通过关闭终端窗口意外终止的长进程来说非常有用。 一旦运行了屏幕会话,就可以...

  • 发布于 2021-04-02 11:06
  • 阅读 ( 174 )

如何从linux终端终止进程

杀死一个进程有时是摆脱它的唯一方法。尽管名字很刺耳,“杀死”一个进程只是意味着“强迫它退出”。 什么是过程(a process)? 运行诸如web浏览器之类的程序、与桌面环境相关联的后台进程以及Linux系统服务都是进程。 您可...

  • 发布于 2021-04-03 14:39
  • 阅读 ( 206 )

什么是punkbuster,我可以卸载它吗?

...个过程-PnkBstrA.exe文件以及PnkBstrB.exe文件-在你电脑的后台运行。PunkBuster监视你的系统,寻找在线游戏中作弊的证据。 什么是朋克灌木丛(punkbuster)? PunkBuster由Even Balance,Inc.开发,历史悠久。它创建于2000年,并首次纳入2001年的...

  • 发布于 2021-04-05 06:08
  • 阅读 ( 288 )
c9449379994
c9449379994

0 篇文章

相关推荐