假设我在终端中启动一个进程,它在运行时将输出发送到标准错误。我想将进程移至后台,同时使其静音。
有没有办法在不停止进程并使用&
和重新启动它的情况下执行此操作> /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
.
答案4
另一个命令行工具是detach
.最新版本支持编写 pidfiles,使用 stdin、stdout 和 stderr 文件以及在前台运行。 ( 的网站detach
也讨论了类似的工具。)