在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我们得到预期的结果,向下滚动终端窗口。ping正在运行时,无法在终端窗口中执行其他操作。要终止命令,请按Ctrl+C。
Ctrl+C屏幕截图中突出显示了Ctrl+C的可见效果。平做了一个简短的总结,然后停了下来。
让我们重复一遍。但这次我们将按Ctrl+Z而不是Ctrl+C。任务不会终止。这将成为一项背景任务。我们控制了返回给我们的终端窗口。
ping www.tl80.cn Ctrl+Z点击Ctrl+Z的可见效果在屏幕截图中突出显示。
这一次,我们被告知进程停止了。停止并不意味着终止。就像一辆停在停车标志处的汽车。我们还没有把它报废扔掉。它还在路上,静止不动,等着走。这个过程现在是一个后台作业。
jobs命令将列出当前终端会话中已启动的作业。因为作业是(不可避免的)进程,我们也可以使用ps命令来查看它们。让我们使用这两个命令并比较它们的输出。我们将使用T选项(terminal)选项只列出在这个terminal窗口中运行的进程。请注意,不需要使用连字符-with-T选项。
jobs ps Tjobs命令告诉我们:
ps命令告诉我们:
以下是STAT列的常用值:
STAT列中的值后面可以跟有以下附加指标之一:
我们可以看到Bash的状态是Ss。大写的“S”告诉我们bashshell正在休眠,它是可中断的。一旦我们需要它,它就会回应。小写的“s”告诉我们shell是会话的前导。
ping命令的状态为T。这告诉我们ping已被作业控制信号停止。在本例中,我们使用Ctrl+Z将其置于背景中。
ps T命令的状态为R,表示running。+表示此进程是前台组的成员。因此ps T命令正在前台运行。
bg命令用于恢复后台进程。它可以与工号一起使用,也可以不与工号一起使用。如果使用它时没有作业编号,则默认作业将显示在前台。进程仍在后台运行。您不能向它发送任何输入。
如果发出bg命令,我们将恢复ping命令:
bgping命令继续,我们再次在终端窗口中看到滚动输出。将为您显示已重新启动的命令的名称。这在屏幕截图中突出显示。
但我们有个问题。任务正在后台运行,不接受输入。那我们怎么阻止呢?Ctrl+C什么都不做。我们可以看到它时,我们键入它,但后台任务没有收到这些击键,所以它一直在愉快地ping远离。
事实上,我们现在处于一种奇怪的混合模式。我们可以在终端窗口中键入内容,但是ping命令的滚动输出会很快将我们键入的内容清除掉。我们键入的任何内容都会在早期生效。
为了停止我们的后台任务,我们需要把它放到前台,然后停止它。
fg命令将把后台任务带入前台。就像bg命令一样,它可以与作业编号一起使用,也可以不与作业编号一起使用。将其与作业编号一起使用意味着它将对特定作业进行操作。如果使用时没有作业编号,则使用发送到后台的最后一个命令。
如果我们键入fg,ping命令将被带到前台。我们键入的字符与ping命令的输出混合在一起,但是shell对它们进行操作,就好像它们像往常一样在命令行中输入一样。事实上,从bashshell的角度来看,这正是所发生的事情。
fg现在ping命令再次在前台运行,我们可以使用Ctrl+C来终止它。
Ctrl+C那可不太好。显然,当进程不产生输出且不需要输入时,在后台运行进程效果最好。
但是,不管是不是混乱,我们的例子确实做到了:
当您使用Ctrl+C和Ctrl+Z时,您正在向进程发送信号。这些是使用kill命令的简写方法。kill可以发送64种不同的信号。在命令行中使用kill-l列出它们。杀戮不是这些信号的唯一来源。其中一些由系统中的其他进程自动引发
这里有一些常用的。
我们必须使用kill命令来发出没有指定组合键的信号。
通过使用Ctrl+Z移到后台的进程被置于stopped状态。我们必须使用bg命令重新启动它。作为正在运行的后台进程启动程序很简单。在命令行末尾附加一个与号。
尽管后台进程最好不要写入终端窗口,但我们将使用这样做的示例。我们需要在截图中有一些我们可以参考的东西。此命令将作为后台进程启动一个无休止的循环:
而true;do echo“How To Geek Loop Process”;sleep 3;done&;
我们被告知进程的作业编号和进程ID。我们的作业编号是1,进程id是1979。我们可以使用这些标识符来控制这个过程。
无穷循环的输出开始出现在终端窗口中。和以前一样,我们可以使用命令行,但是我们发出的任何命令都会与循环进程的输出交错在一起。
长征
为了停止我们的进程,我们可以使用jobs来提醒自己job编号是多少,然后使用kill。
jobs报告我们的流程是job number 1。要将这个数字与kill一起使用,我们必须在它前面加一个百分号%。
jobs kill %1kill将SIGTERM信号(信号编号15)发送到进程并终止。下次按下回车键时,将显示作业的状态。它将进程列为“已终止”。如果进程不响应kill命令,则可以将其提升一个级别。将kill与SIGKILL一起使用,信号号9。把数字9放在kill命令和作业号之间。
kill 9 %1相关:如何从Linux终端终止进程
...便的Linux命令备忘单。如果您想运行其中的几个,请查看如何在带屏幕的Linux终端上执行多任务。 ...
...好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。 进程状态如何在linux上工作 当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内...
...建集成服务的过程,甚至与杂志进行对话。 本教程演示如何设置启动系统时启动的系统服务。要在登录时启动图形程序,请改用桌面的启动管理器。 启动时运行程序 有时,您在计算机上安装的软件会将自己连接到Linux启动过...
...窗口推到后台(称为“分离”)。当你想看到你的进程是如何进行的,你可以把窗口拉到前台(“重新连接”)并再次使用它。这对于您不希望通过关闭终端窗口意外终止的长进程来说非常有用。 一旦运行了屏幕会话,就可以...
杀死一个进程有时是摆脱它的唯一方法。尽管名字很刺耳,“杀死”一个进程只是意味着“强迫它退出”。 什么是过程(a process)? 运行诸如web浏览器之类的程序、与桌面环境相关联的后台进程以及Linux系统服务都是进程。 您可...
...个过程-PnkBstrA.exe文件以及PnkBstrB.exe文件-在你电脑的后台运行。PunkBuster监视你的系统,寻找在线游戏中作弊的证据。 什么是朋克灌木丛(punkbuster)? PunkBuster由Even Balance,Inc.开发,历史悠久。它创建于2000年,并首次纳入2001年的...