如果我已经在后台启动了一个作业,我该如何重定向它的输出/dev/null
或者以某种方式使其输出静音?
我没有像这样开始工作:
CMD >& /dev/null &
我是这样开始的:
CMD &
现在它CMD
已经在运行了,我可以让它的输出静音吗?
答案1
摘自链接“重定向正在运行的进程的输出”给出这个 StackOverflow 答案类似问题。你可以将这些说明与这个答案讨论将同一技巧用于其他目的。
以下是基本流程,假设命令已在运行。这对于常规 STDOUT 输出非常有效。原始写作使用cat > foo1
长时间运行的输出程序作为示例。
根据您想要静音的进程的具体情况,您可能需要在 STDERR(或其他输出流)上执行此过程,而不是在 STDOUT 上执行,或者在 STDOUT 之外执行。
查找进程 PID。
$ ps aux | grep cat user 6760 0.0 0.0 1580 376 pts/5 S+ 15:31 0:00 cat
使用 GDB 连接到该进程。
$ gdb -p 6760 /bin/cat GNU gdb 6.4.90-debian Copyright (C) 2006 Free Software Foundation, Inc [lots more license stuff snipped] Attaching to program: /bin/cat, process 6760 [snip other stuff that's not interesting now]
在 GDB 中,关闭进程 STDOUT。(“(gdb)”是 GDB 提示符;输入您在这些行上看到的内容。其他行是示例输出。)
(gdb) p close(1) $1 = 0
在 GDB 中,打开一个新文件。注意:返回值“1”表示新文件作为 STDOUT 打开;“0600”是模式(文件权限)新文件(意味着“对所有者可读可写,其他任何人都不能”)。
(gdb) p creat(“/tmp/foo3″, 0600) $2 = 1
退出 GDB;保持进程运行。
(gdb) q The program is running. Quit anyway (and detach it)? (y or n) y Detaching from program: /bin/cat, process 6760