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