Как я могу перенаправить stdout/stderr уже рабочего процесса?

Это не совершенно ясно, но для пользы аргументов позволяет, запускаются с предпосылки, что Вы только собираетесь быть использованием 1 интерфейса за один раз, такой, что Вам никогда не будут присваивать тот же IP и активный одновременно на двух различных MAC-адресах. Это не будет работать (по крайней мере, не в традиционном значении работы слова). Так же они должны быть той же подсетью, очевидно, если беспроводные и проводные сети находятся на различных подсетях, то же выделение IP не может работать.

Если и проводные и беспроводные сети экспортируют ту же подсеть затем ее относительно тривиальное для перевода в рабочее состояние того конкретного интерфейса с тем же IP, DHCP не имеет никакого ограничения, предотвращающего тот же IP, скупо выдаваемый к двум различным MAC-адресам (хотя это должно было бы конкретно быть настроено в конфигурации DHCP) сделать так. Если конкретный адрес резервируется для Вас нет также никакой причины, почему Вы не могли статически поднять его по мере необходимости в ручной конфигурации для каждой сети.

7
задан 16 December 2010 в 03:55
3 ответа

Это похоже на те инструкции, данные для gdb являются неправильными и неполными несколькими способами.

Во-первых, необходимо использовать

gdb [executablefile] [pid]

так, чтобы GDB знала то, с чем программой она соединяется, на самом деле. Я просто протестировал это, и это может использовать разделенный исполняемый файл. Обратите внимание, что, в то время как gdb присоединен к процессу, процесс будет приостановлен. Если этот процесс связывается по сети, введите быстро, или сетевое соединение будет, вероятно, тайм-аут.

Во-вторых, данные команды не объясняют, что они делают, и инструкция, что Вы должны CD "к каталогу, который Вы хотите, чтобы Ваша программа записала, файлы к" является неправильным, так как gdb просит, чтобы исходная программа выполнилась creat() функция. Данный пример создаст myprog.stderr и myprog.stdout файлы в Текущем Рабочем Каталоге под управлением программы, не в каталоге, Вы выполнили gdb. Используйте абсолютные пути здесь, если Вы не знаете то, что CWD той программы (или взгляд на ls -l /proc/[pid]/cwd).

В-третьих, работая с отсутствием объяснения, важно знать что первый параметр к dup2() число дескриптора файла, возвращенное предыдущим creat() таким образом, если бы эта запускающая программа имела несколько файлов, открытых, то Вы могли бы закончить с обменом как

(gdb) call creat("/home/me/myprog.stdout",0600)
$1 = 7
(gdb) call dup2(7,1)
$2 = 1
(gdb) call creat("/home/me/myprog.stderr",0600)
$3 = 8
(gdb) call dup2(8,2)
$4 = 2

При выходе из gdb он спросит Вас, если Вы захотите "выйти так или иначе (и отсоедините его)", ответ - да.

Наконец, bg и disown удар builtins. Если Вы не использовали удар, то Вы самостоятельно отсюда. bg перемещает приостановленное задание в фон, как будто он был запущен там с помощью somecommand &, и disown удаляет программу из списка удара активных программ к SIGHUP, когда удар выходит.

5
ответ дан 2 December 2019 в 23:45

Вы ничего не можете сделать удаленно. Войдите в другой сервер с помощью ssh и ту же учетную запись, которая использовалась для запуска процесса. Вы сможете управлять процессом от новой сессии.

0
ответ дан 2 December 2019 в 23:45

Вы можете использовать повторное перенаправление ( https://github.com/jerome-pouiller/reredirect/ ).

Тип

reredirect -m FILE PID

и выходные данные (стандартные и ошибочные) будут записаны в ФАЙЛ.

README повторного перенаправления также объясняет, как для восстановления исходного состояния процесса, как перенаправить на другую команду или перенаправить только stdout или stderr.

0
ответ дан 2 December 2019 в 23:45

Теги

Похожие вопросы