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

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

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

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

答案1

为时已晚。之后过程启动后,shell 不再控制过程文件描述符所以你不能安静通过 shell 命令来实现。

你只能尝试aSIGHUP到进程。如果你的进程正确处理它,它应该脱离控制终端。不幸的是,许多软件无法正确处理它并直接死掉。

答案2

从终端运行的进程将其 stdin、stdout 和 stderr 绑定到终端,如果不重新获得对该终端的控制权,您将无法对其执行任何操作...通常情况下。但有一些棘手的工具实际上可以让你做到这一点。看一下这个例子。以及那里提到的其他程序retty

答案3

我不同意 andcoz 的观点,即现在停止输出已经太晚了。

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

之前已经很好地描述了这一点https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764

答案4

另一个命令行工具是detach.最新版本支持编写 pidfiles,使用 stdin、stdout 和 stderr 文件以及在前台运行。 ( 的网站detach也讨论了类似的工具。)

http://inglorion.net/software/detach/

相关内容