перенаправление потока вывода программы запущенной в фоне

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

v4567
Сообщения: 162
ОС: Devuan

перенаправление потока вывода программы запущенной в фоне

Сообщение v4567 »

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

Код: Выделить всё

kill -20 `ps ax | grep tcpdump | grep -v grep | cut -c1-6`


после нажатия enter-а процесс уснёт.

Остался не решённый второй вопрос. Как теперь, указать ему что бы он поток вывода направлял не в консоль с которой был запущен, а например в файл, (опять же если это возможно)?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: перенаправление потока вывода программы запущенной в фоне

Сообщение NickLion »

Вместо той страшной строки не проще набрать kill -20 %1 ?
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: перенаправление потока вывода программы запущенной в фоне

Сообщение yars »

tcpdump | tee log.txt
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21253
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: перенаправление потока вывода программы запущенной в фоне

Сообщение Bizdelnick »

Почему сразу не направить вывод в файл?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: перенаправление потока вывода программы запущенной в фоне

Сообщение NickLion »

Да, кстати, можно kill вообще не использовать, а fg и Ctrl+Z снова нажать.
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: перенаправление потока вывода программы запущенной в фоне

Сообщение v4567 »

Спасибо ссылке:
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


Расписал всё подробно, может кому пригодится.


Спасибо сказали: