在 tcsh 中,如何才能停止已经运行的后台进程的输出?

在 tcsh 中,如何才能停止已经运行的后台进程的输出?

如果我已经在后台启动了一个作业,我该如何重定向它的输出/dev/null或者以某种方式使其输出静音?

我没有像这样开始工作:

CMD >& /dev/null &

我是这样开始的:

CMD &

现在它CMD已经在运行了,我可以让它的输出静音吗?

答案1

摘自链接“重定向正在运行的进程的输出”给出这个 StackOverflow 答案类似问题。你可以将这些说明与这个答案讨论将同一技巧用于其他目的。

以下是基本流程,假设命令已在运行。这对于常规 STDOUT 输出非常有效。原始写作使用cat > foo1长时间运行的输出程序作为示例。

根据您想要静音的进程的具体情况,您可能需要在 STDERR(或其他输出流)上执行此过程,而不是在 STDOUT 上执行,或者在 STDOUT 之外执行。

  1. 查找进程 PID。

    $ ps aux | grep cat
    user 6760 0.0 0.0 1580 376 pts/5 S+ 15:31 0:00 cat
    
  2. 使用 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]
    
  3. 在 GDB 中,关闭进程 STDOUT。(“(gdb)”是 GDB 提示符;输入您在这些行上看到的内容。其他行是示例输出。)

    (gdb) p close(1)
    $1 = 0
    
  4. 在 GDB 中,打开一个新文件。注意:返回值“1”表示新文件作为 STDOUT 打开;“0600”是模式(文件权限)新文件(意味着“对所有者可读可写,其他任何人都不能”)。

    (gdb) p creat(“/tmp/foo3″, 0600)
    $2 = 1
    
  5. 退出 GDB;保持进程运行。

    (gdb) q
    The program is running. Quit anyway (and detach it)? (y or n) y
    Detaching from program: /bin/cat, process 6760
    

来源

相关内容