【问题标题】:Unable to hide a running process in terminal无法在终端中隐藏正在运行的进程
【发布时间】:2009-04-27 14:34:39
【问题描述】:

我昨天通过 MacPorts 的应用程序进行了升级,显然花了大约 4 个小时。 在终端的一个选项卡中看到安装过程令人恼火。

问题:隐藏终端中正在运行的进程,这样它就不会占用我的工作区空间

我今天发现 Bash 4 中有一个新的命令 coproc:

协程异步执行 在一个子shell中,就好像命令 在执行shell和协进程之间建立

我不确定您是否可以使用它来解决问题。我没有设法使用它。

如何隐藏正在运行的进程,使其在终端中不可见但继续运行?

【问题讨论】:

  • 时机成熟时最好将其移至 ServerFault...
  • @dmckee:哦,serverfault,你是说据说6周后开通的新网站?
  • @Jérôme:就是这样。这是一个很好的问题,但似乎更多的是“我如何运行计算机”。而不是与我相关的编程。

标签: unix process terminal


【解决方案1】:

您是否考虑过 Ctrl + Z 将进程暂停,然后 bg 在后台运行此进程?

要将您的进程与终端分离,您可以输入disown。您现在可以关闭终端,甚至您的会话。

这里的问题是输出无论如何都会出现在 bash 中。

您也可以在screen 中启动您的程序。此命令提供了一种简单的方法来启动程序、关闭控制台并稍后检索它。

【讨论】:

  • 假设我按下 Ctrl-Z 并且我正在通过 MacPorts 运行安装过程。如果我暂停该过程并重新开始,会导致一些冲突吗?
  • 很好,但我也建议在“bg”之后使用“disown”,然后您可以关闭终端(可能)没有问题。
  • @Masi:当你暂停整个过程时,它不会引起任何冲突。这就像一个很长的过程切换。 @Josh:谢谢,我不知道否认!不依赖终端比有屏幕简单多了!
  • @Jérôme:请注意,放弃是单向的。它们无法像屏幕一样重新连接。
【解决方案2】:

我怀疑你正在寻找 nohup

nohup LongRunningNoisyProgram &

将运行该程序,将输出记录到一个文件中以便您看不到它,将该程序推入后台,并且如果您稍后在终端仍在运行时退出该程序,则不会取消该程序。

【讨论】:

  • Nohup 是一个很好的工具,但如果您在启动它之后发现问题...
  • 如果您从终端启动Firefox,它是否使用该命令?使用它时,它必须在终端中有一些输出。它显然对用户隐藏了这些信息。
  • @Masi: & 在后台启动进程。
  • disown 的问题在于它是特定于 bash 的。 Mac 不久前切换到 BASH,所以 OP 可以使用 disown (并且永远看不到输出)。在 Sun 上,nohup 有一个命令行开关,可让您将 nohup 应用于正在运行的进程(或 jobID)。 @Masi,如果您从那里启动,Firefox 会向您的终端发送垃圾邮件。我是 screen 的忠实粉丝,我的大部分日常桌面活动都在一个中运行,但 screen 肯定必须在你开始之前发生。我的大部分爱好都是在屏幕上编程,用它来分割我的终端,顶部是 vi,底部是命令行。
【解决方案3】:

至少有一件事其他回复者没有涉及:如何管理隐藏进程

假设您有 100 个使用“nohup find / &”创建的后台进程。您想退出它们以真正了解后台进程是如何工作的。请使用命令:

ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9

然后,您可能想知道如何控制按键来隐藏进程。你可以把它改成p,这里susp代表CTRL+z (^Z):

stty 怀疑

您可以在此处查看密钥:

stty -a

请比较更改前后的标准输出。该命令特别有用,因为它有助于记住其他命令,例如 ^W(删除单词)。

Jerome 对屏幕有一个很好的提示。我强烈建议追求方向:

http://www.commandlinefu.com/commands/matching/screen/c2NyZWVu/sort-by-votes

【讨论】:

    最近更新 更多