Псевдоним Unix для перенаправления вывода фонового процесса
Я ищу способ перенаправить вывод фонового процесса в /dev/null
или какой-то другой файл.
$ python ./spam_console.py &
$ [start doing something in the foreground
$ cat test.py
$ [whole console is spammed with output of python program]
Я ищу способ вывести stdout, stderr этих процессов в какой-нибудь файл, используя простую утилиту командной строки.
$ dump_to -p 1526 --out /dev/null
На /questions/64971/perenapravit-stdoutstderr-fonovogo-zadaniya-iz-konsoli-v-fajl-zhurnala/64977#64977 есть отличное решение с использованием gdb, но я ищу способ обернуть все это простой программой alias/c, чтобы ее можно было легко использовать в командной строке., Я ищу помощь в доступе к GDB неинтерактивным (или программным) способом для выполнения команды в связанной статье.
1 ответ
Я нашел ответ после интенсивного поиска в новостях. dupx
именно то, что я искал.
Dupx - это простая утилита для переназначения файлов уже запущенной программы. Такие оболочки, как Bash, позволяют легко перенаправлять ввод / вывод / ошибку во время запуска программы
>
,<
- как синтаксис, например:echo 'redirect this text' > /tmp/stdout
перенаправит вывод эха в
/tmp/stdout
,Стандартные оболочки, однако, не предоставляют возможности переотображения (перенаправления) вывода (или ввода, или ошибки) для уже запущенного процесса. Дупкс пытается решить эту проблему [...]
[...]
Пример использования
Обратите внимание, что в этих примерах используется синтаксис bash. Сначала мы запускаем фоновое задание bash, которое спит, а затем выводит что-то на стандартный вывод:
bash -c 'sleep 1m && echo rise and shine' &
Перенаправить остаток стандартного вывода в
/tmp/stdout
Следующие вызовы эквивалентны:
dupx -n 0:/tmp/test $! dupx -o /tmp/test $! dupx $! >>/tmp/test
Обратите внимание, что последний пример также переназначает stderr и stdin процесса. Но поскольку целевой процесс был запущен на том же самом tty, что и
dupx
в настоящее время они практически не изменились.Перенаправьте оставшуюся часть stdout и stderr в разные файлы, прочитайте остальную часть stdin из
/dev/null
:Следующие вызовы эквивалентны:
dupx -o /tmp/stdout -e /tmp/stderr -i /dev/null $! dupx -n 0:/tmp/stdout 1:/dev/null 2:/tmp/stderr $! dupx >/tmp/stdout 2>/tmp/stderr </dev/null $!