Итак, есть обычный способ приостановки команд с помощью CTRL + Z, а затем вы можете сделать «bg 1» или еще что-то, чтобы возобновить команду, и это отлично работает.
Что, если бы я запустил команду, которая отправляет кучу вывода на стандартный вывод, но я больше не хочу видеть эти вещи после "отмены паузы" команды. Могу я сделать что-то похожее на "bg 1> file.log"?
Это основано на этот ответ в котором есть инструкции по отправке вывода на /dev/null
.
Чтобы отправить вывод работающей программы на /tmp/file.log
, например, сделайте следующее:
Со второго терминала используйте ps
чтобы получить идентификатор процесса вашей программы.
Тип touch /tmp/file.log
чтобы создать пустой файл для вывода.
Тип gdb -p [PID]
используя идентификатор процесса из ps
.
На (gdb)
введите эти команды:
p dup2(open("/tmp/file.log",1),1)
p dup2(open("/tmp/file.log",1),2)
detach
quit
В ответ на dup2
команды, вы должны увидеть "$1 = 1
" и "$2 = 2
". Вы должны увидеть, что вывод на другом терминале прекратится, и вы сможете cat
или tail -f
файл журнала (или используйте ls -l
несколько раз и увидите увеличение размера).
Теперь вы можете приостановить процесс, используя Ctrl-Z и возобновить его в фоновом режиме, используя bg 1
(или как бы там ни было).