В оболочке вы можете выполнять перенаправление >
<
и т. Д., Но как насчет ПОСЛЕ запуска программы?
Вот как я пришел к этому вопросу: программа, работающая в фоновом режиме моего терминала, продолжает выводить раздражающий текст. Это важный процесс, поэтому мне нужно открыть другую оболочку, чтобы избежать текста. Я бы хотел иметь возможность >/dev/null
или какое-то другое перенаправление, чтобы я мог продолжать работать в той же оболочке.
Ответы:
За исключением закрытия и повторного открытия вашего tty (т.е. выхода из системы и повторного включения, что также может привести к прекращению некоторых фоновых процессов в процессе), у вас остается только один выбор:
например:
Вы также можете рассмотреть:
screen
; экран предоставляет несколько виртуальных TTY, между которыми можно переключаться, не открывая новые сеансы SSH / telnet / и т. д.nohup
; это позволяет вам закрыть и снова открыть сеанс без потери каких-либо фоновых процессов в процессе ...источник
open("/path/to/new/stdout",O_WRONLY)
. Однако O_WRONLY, вероятно, будет недоступен; его значение находится1
в Linux / glibc.1025
активируетO_APPEND
в дополнение кO_WRONLY
, что удобно, если вы перенаправляете и stderr, и stdout в один и тот же файл.Это будет делать:
Это не так чисто (показывает строки вроде :)
write(#,<text you want to see>)
, но работает!Вам также может не понравиться тот факт, что аргументы сокращены. Для управления этим используйте
-s
параметр, который устанавливает максимальную длину отображаемых строк.Он улавливает все потоки, поэтому вы можете как-то отфильтровать это:
показывает только вызовы дескриптора 1.
2>&1
заключается в перенаправлении STDERR в STDOUT, посколькуstrace
по умолчанию выполняется запись в STDERR.источник
sudo
это необходимо.копируя прекрасные исследования Владра (и других):
создайте следующие два файла в одном каталоге, что-нибудь на вашем пути, скажем, $ HOME / bin:
silent.gdb, содержащий (из ответа владра):
и тишина, содержащая:
Теперь, когда вы в следующий раз забудете перенаправить, например, firefox, и ваш терминал начнет загромождаться неизбежными сообщениями "(firefox-bin: 5117): Gdk-WARNING **: XID collision, проблема впереди":
Вы также можете перенаправить вывод gdb в / dev / null, если не хотите его видеть.
источник
--batch-silent
которая подавляет вывод и не выгружает вас в консоль gdb, если что-то пойдет не так (например, отсутствует процесс). Кстати,$!
относится к самому последнему фоновому заданию, но я не думаю, что его можно использовать в самом скрипте. Я использую псевдоним:alias silencebg='silence $!'
Перенаправить вывод запущенного процесса на другой терминал, файл или экран:
Внутри GDB :
Отсоедините запущенный процесс от терминала bash и оставьте его в живых:
Объяснение:
20818 - просто пример запущенного процесса pid
p - распечатать результат команды gdb
close (1) - закрыть стандартный вывод
/ dev / pts / 4 - терминал для записи, чтобы
закрыть (2) - закрыть вывод ошибки
/ tmp / myerrlog - файл в запись в
q - выйти из gdb
bg% 1 - запустить остановленное задание 1 в фоновом режиме
disown% 1 - отсоединить задание 1 от терминала
источник
stdin
(дескриптор файла0
) закрыт.p open("/tmp/myerrlog", 2)
?Это не прямой ответ на ваш вопрос, но в последние несколько дней я нашел полезной эту технику: выполнить начальную команду с помощью «screen», а затем отсоединиться.
источник
это часть сценария bash, основанная на предыдущих ответах, которые перенаправляют файл журнала во время выполнения открытого процесса, он используется как постскрипт в
logrotate
процессеисточник
https://www.isi.edu/~yuri/dupx/
источник
Вы можете использовать переадресацию ( https://github.com/jerome-pouiller/reredirect/ ).
Тип
а выходные данные (стандартные и ошибочные) будут записаны в ФАЙЛ.
reredirect README также объясняет, как восстановить исходное состояние процесса, как перенаправить на другую команду или перенаправить только stdout или stderr.
reredirect
также предоставьте скрипт,relink
который позволяет перенаправить на текущий терминал:(reredirect, похоже, имеет те же функции, что и Dupx, описанный в другом ответе, но это не зависит от Gdb).
источник