Псевдоним 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' &
  1. Перенаправить остаток стандартного вывода в /tmp/stdout

    Следующие вызовы эквивалентны:

    dupx -n 0:/tmp/test $!
    dupx -o /tmp/test $! 
    dupx $! >>/tmp/test 
    

    Обратите внимание, что последний пример также переназначает stderr и stdin процесса. Но поскольку целевой процесс был запущен на том же самом tty, что и dupx в настоящее время они практически не изменились.

  2. Перенаправьте оставшуюся часть 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 $!
    
Другие вопросы по тегам