10

这个问题很特殊,因为某些键(例如 CTRL+Z)停止工作。

我试图通过输入顺序将进程置于后台:

  1. 寻找 /
  2. CTRL+Z
  3. bg

但是,我仍然可以看到标准输出。仅执行第一步的唯一区别是命令 CTRL+Z 不再起作用。当我有未保存的工作并且我的硬盘超过 100GB 时,这是相当讨厌的。所以

如何将进程置于后台?

[细节]

我在 Mac 上使用第四版 Bash。

[尼古拉斯·莱利的关键回复]

问题真的是我不明白运行进程背景的“后果”。我不明白为什么 CTRL+Z 之类的命令对后台进程不起作用。我仍然能够使用以下命令在另一个 shell 中终止该进程:

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

8 回答 8

12

^Z不起作用,因为最前面的工作现在是 shell,而 shell 通常不响应SIGTSTP. (如果您确实想暂停非登录 shell,suspend通常可以。)

问题似乎是您误解了在后台工作的后果。重定向作业的标准输出是不相关的。

事实上,目前还不清楚想做什么。如果你只是想停止find运行,那么fg它并使用^Cor ^\(默认情况下分别发送SIGINTSIGQUIT)。

如果您想继续find运行但抑制其进一步输出,那么我能想到的最简单的解决方案是使用bg ; disown ; exit. 这将阻止 shell 杀死其子进程 ( find) 并退出 shell;假设它位于终端窗口的顶层,您将看到更多输出find并将继续运行(但您将无法与之交互)。

于 2009-04-28T03:23:36.373 回答
6

我用不认。

find / & disown
exit # close the terminal and the command still runs

你也可以在 ^Z 之后使用 disown:

find /
^Z
bg
disown
exit

我相信,disown 是一个内置的bash。不确定其他外壳的替代品。

有关详细信息,请参阅我在 Server Fault 上的等效答案

于 2009-04-28T03:58:59.737 回答
5

您可以在任何类 UNIX 系统上使用 stty 将操作设置为不同的键。

$ stty susp Q

将使 Q 成为您的暂停键,而不是 CTRL-Z。

于 2009-04-28T03:12:33.903 回答
5

后台处理进程不会断开与终端设备的输出,这就是为什么您仍然可以看到输出,并且输出很可能包含控制字符,这些字符可能会填满您的 TTY 设置(cat使用二进制文件是一种很好的方法)。

如果您希望作业在后台运行,请正确执行:

find / >/tmp/out 2>&1 &

然后在完成后检查/tmp/out文件。

于 2009-04-28T03:25:31.110 回答
2

我通常用 nohup 做这种事情。像这样:

nohup 查找 / > /tmp/myresults.txt &

nohup 确保进程不会停止,即使控制台消失(例如,您关闭窗口或丢失 SSH 或其他)。“>”将输出发送到文件而不是控制台,“&”将作业置于后台。

于 2009-04-28T03:25:20.380 回答
0

我假设您使用的是 Linux 或 UNIX 的常见变体,可能还有 bash shell。在这种情况下:

CTRL-Z 将SIGTSTP信号发送到前台进程。您应该能够通过指定 .kill 命令来执行相同的操作kill -s SIGTSTP [pid]

于 2009-04-28T03:16:33.677 回答
0

我知道在 Ubuntu 9.04 中,您可以在它之后使用 & 启动该进程以在后台运行它。例如,“sudo gedit /boot/grub/menu.lst &”将启动一个文本编辑器,在后台编辑 GRUB 配置文件。

于 2009-04-28T03:39:30.237 回答
0

杀死 -STOP your_pid_here

从另一个控制台窗口?

http://tombuntu.com/index.php/2007/11/23/how-to-pause-a-linux-process/#comment-132413

于 2011-02-23T22:26:25.510 回答