3

Если я запустил задание в фоновом режиме, как я могу перенаправить его вывод в /dev/null или каким-то образом отключить вывод?

Я не начал работу, как:

CMD >& /dev/null &

Я начал это так:

CMD &

Теперь, когда CMD уже запущен, я могу заставить его замолчать?

1 ответ1

2

Взятые по ссылке "перенаправление вывода из запущенного процесса", приведенной в этом StackOverflow ответ на аналогичный вопрос. Вы можете сравнить эти указания с этим ответом, в котором обсуждается тот же трюк для других целей.

Вот основной процесс, предполагая, что команда уже запущена. Это хорошо работает для обычного вывода STDOUT. Исходная запись использует cat > foo1 в качестве примера длительной программы вывода.

В зависимости от особенностей процесса, который вы хотите отключить, вам может потребоваться выполнить этот процесс на STDERR (или других выходных потоках) вместо или в дополнение к 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
    

Источник

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .