如何将进程移至后台并同时使其输出静音?


11

假设我在终端中启动一个进程,并在运行时将输出发送到标准错误。我想将进程移到后台,同时也使其静音。

有没有一种方法可以执行此操作而又不停止进程并使用&和重新启动它> /dev/null 2>&1?我想知道是否有一些命令可以执行bg 并可以更改目标进程的输出描述符。

Answers:


9

太晚了。经过一个过程开始时,外壳有没有更多的控制过程的文件描述符,所以你不能沉默的一个shell命令它。

你只能尽量一个SIGHUP的过程。如果您的进程正确处理了它,则应脱离对tty的控制。不幸的是,许多软件不能正确地处理它,只会死掉。


您不能按CTRL + Z将该进程置于后台吗?它不会使过程静音,如果您注销,我认为它也会终止该过程。
罗伊·里科

1
@RoyRico,杀死SIGSTOP到进程(或者就像你说的做CTRL + Z)不沉默的过程。停止进程!
andcoz 2011年

5

从终端运行的进程将其stdin,stdout和stderr绑定到该终端,并且如果不重新获得对该终端的控制权,您将无法对其进行任何操作。但是实际上有一些棘手的工具可以帮助您做到这一点。看这个例子。和retty那里提到的其他程序一样。


3

我不同意andcoz认为现在将输出静音是为时已晚。

假设该进程在前台运行,请使用Ctrl-Z挂起该进程。这样做将报告作业号和进程ID。您可以继续使用bg %1(对于作业1)将过程移至后台。尽管这会将进程移至后台,但不会使输出静音。要使输出静音,可以使用gdb将所有输出重定向到/dev/null

之前在/programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764中对此进行了很好的描述。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.