我不知道是否有一种简单的方法可以做到这一点.直到有人提出一个,这是一个复杂的方法来做到这一点:
将原始案例视为控件:
#delayed print to clutter up watch later
bash -c 'sleep 10; echo ASDF' &
#watch dummy command, observe cluttering
watch -n1 'ls -la |head -25'
我的方法是劫持所有可能使窗口混乱的进程,并将其输出抛出到/ dev / null的深渊中.
重定向已在运行的进程的输出的标准方法是using gdb.为了以非交互方式进行,您必须使用the -batch switch和要重定向的pid的手动规范.结果是
bash -c 'sleep 10; echo ASDF' &
#sudo gdb -p "$!" -batch -ex 'p dup2(open("/dev/null",0),1)' -ex 'p dup2(open("/dev/null",0),2)' -ex 'detach'
gdb -p "$!" -batch -ex 'p dup2(open("/dev/null",0),1)' -ex 'p dup2(open("/dev/null",0),2)' -ex 'detach'
watch -n1 'ls -la |head -25'
哪里$!是最后生成的进程的pid,这正是我们在示例中所需要的.在您的实际用例中,您必须使用给定shell的loop over every pid running in the background,并将每个pid替换为$!以上.
另请注意,对于您自己的进程,gdb调用应该没有sudo,但由于某些原因(源于某些配置),它只允许我使用sudo执行它.你的旅费可能会改变.