Скажем, я запускаю процесс в терминале, и он отправляет вывод со стандартной ошибкой во время работы. Я хочу отодвинуть процесс на задний план и одновременно заставить его замолчать.
Есть ли способ сделать это, не останавливая процесс и не запуская его снова с помощью &
и > /dev/null 2>&1
? Мне интересно, есть ли какая-нибудь команда, которая выполняет bg
и может также изменить выходные дескрипторы целевого процесса.
источник
SIGSTOP
процесс (или , как вы говорите , делаете CTRL + Z ) не подавляет процесс. Это останавливает процесс!Процесс, запущенный из терминала, имеет свои stdin, stdout и stderr, связанные с терминалом, и вы ничего не можете с этим поделать, не получив контроль над этим терминалом ... Обычно. Но есть несколько хитрых инструментов, которые действительно позволяют вам это сделать. Посмотрите на этот пример . И другие программы, подобные
retty
упомянутым там.источник
Я не согласен с andcoz, что слишком поздно, чтобы заставить замолчать вывод.
Предполагая, что процесс выполняется на переднем плане, используйте,
Ctrl-Z
чтобы приостановить процесс. Это сообщит номер задания и идентификатор процесса. Вы можете пойти дальше и переместить процесс в фоновый режим, используяbg %1
(для задания № 1). Хотя это перемещает процесс в фоновый режим, он не заглушает вывод. Чтобы отключить вывод, вы можете использоватьgdb
для перенаправления всех выводов/dev/null
.Это было очень хорошо описано ранее по адресу /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .
источник
Еще один инструмент командной строки
detach
. Последняя версия поддерживает запись pid-файлов, использование файлов для stdin, stdout и stderr и запуск на переднем плане. (Сайтdetach
также обсуждает похожие инструменты.)http://inglorion.net/software/detach/
источник