Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2016, 23:16   #1
v4567
Пользователь
 
Регистрация: 06.07.2008
Сообщений: 91
По умолчанию перенаправление потока вывода программы запущенной в фоне

Например запускаю tcpdump, останавливаю его комбинацией клавиш Ctrl+z. Дальше если его перевести в фон командой bg, то вывод он будет направлять в консоль на которой был запущен.
Вопрос первый, как его теперь остановить с этой консоли, (если это конечно возможно)? Комбинация клавиш Ctrl+z не действует так как теперь tcpdump в фоне. Можно с другой консоли послать ему сигнал kill -20 pid и он опять уснёт. Ответ на этот вопрос нашёл. Надо прямо в этой консоли в которую идёт поток, не обращая внимания на него набирать вот такую комбинацию:
Код:
kill -20 `ps ax | grep tcpdump | grep -v grep | cut -c1-6`
после нажатия enter-а процесс уснёт.

Остался не решённый второй вопрос. Как теперь, указать ему что бы он поток вывода направлял не в консоль с которой был запущен, а например в файл, (опять же если это возможно)?
v4567 вне форума Ответить с цитированием
Старый 01.09.2016, 10:39   #2
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Цитата:
Вопрос первый, как его теперь остановить с этой консоли, (если это конечно возможно)? Комбинация клавиш Ctrl+z не действует так как теперь tcpdump в фоне.
Командой fg можно вернуть его обратно из фона и потом останавливать комбинацией Ctrl+z.

Цитата:
Как теперь, указать ему что бы он поток вывода направлял не в консоль с которой был запущен, а например в файл, (опять же если это возможно)?
Добавить > myfile в конец команды.
Код:
tcpdump > /path/to/my/file.txt
Максай вне форума Ответить с цитированием
Старый 01.09.2016, 14:35   #3
v4567
Пользователь
 
Регистрация: 06.07.2008
Сообщений: 91
По умолчанию

Спасибо ссылке:
gdb
[br]
Резюмируя всё сказанное можно составить такой план действий.
[br]
Останавливаем процесс. Можно воспользоваться killall, можно kill -20 %название процесса. Я написал маленький скриптик:
Код:
#!/bin/bash

pid=`ps ax | grep "$1" | grep -v grep | cut -c1-6` &> /dev/null
pid=`echo $pid` &> /dev/null

kill -20 $pid

exit
Строка pid=`echo $pid` &> /dev/null для того что бы убрать пробелы перед номером pid если он 4-х, 3-х значный. По другому этот пробел у меня не получилось убрать.
[br]
Параметром этому скрипту передаём процесс который хотим остановить. Если процессов два или более, например:
Код:
tcpdump -i eth0 -n -nn
tcpdump -i eth1 -n -nn
то необходимо в параметре к скрипту передавать название самого процесса и его параметры, только всё это заключать в двойные кавычки, например:
Код:
скрипт "tcpdump -i eyh0 -n -nn"
После этого вывод на консоль уже не идёт, можно создать файлы куда в дальнейшем будем писать вывод, по команде ps узнать их pid-ы,
и далее выполнить такие команды для каждого процесса:
Код:
gdb -p pid процесса
gdb даёт свою командную строку в ней вводим:
Код:
p close(1)
p open("/путь/файл1", 1)
p close(2)
p open("/путь/файл2", 1)
q
далее подтверждаем "y"

Всё теперь вывод можно смотреть по команде tail:
Код:
tail -f /путь/файл1
Расписал всё подробно, может кому пригодится.
v4567 вне форума Ответить с цитированием
Старый 01.09.2016, 14:51   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

лучше бы сразу при запуске перенаправили вывод как вам предложили
(и между прочим именно то же самое вы сделали через gdb)
и так же через tail.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.09.2016, 21:04   #5
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Еще есть инересный вариант

К примеру я запускаю

Код:

user@host:/$ mpg123 "Axel Thesleff - Bad Karma.mp3" &
user@host:/$  kolourpaint pic.png &


user@host:/$ jobs
[1]-  Running                 mpg123 "Axel Thesleff - Bad Karma.mp3" &
[2]+  Running                 kolourpaint pic.png &

ch3ll0v3k@ch3ll:/$ %1
mpg123 "Axel Thesleff - Bad Karma.mp3"
^C
[1:49] Decoding of Axel Thesleff - Bad Karma.mp3 finished.

user@host:/$ jobs
[2]+  Running                 kolourpaint pic.png &

user@host:/$ $2
kolourpaint pic.png
^C
kolourpaint4 exit
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенаправление вывода с неконсольной программы Lexus_ Общие вопросы Delphi 9 21.08.2014 22:27
перенаправление вывода insmod Sam Gold Qt и кроссплатформенное программирование С/С++ 0 19.11.2012 12:55
Запуск консоли и перенаправление вывода ros.pro Общие вопросы Delphi 1 02.01.2012 18:49
Перенаправление ввода/вывода dudeboy Win Api 0 16.11.2009 11:36
перенаправление вывода на консоль в файл Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 26.01.2009 15:31