консоль демона
От: MikelSV http://www.centerix.ru
Дата: 29.09.11 06:45
Оценка:
Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?

Хочу получить доступ к stdin, stdout и stderr запущенной программы. Замкнуть их на stdin и компанию программы, откуда это делается, должно получиться управление консолью демона.

open() открывает /proc/pid/fd/ 0, 1, 2 , но дальше глухо, данных нет. либо так нельзя, либо я делаю неправильно.

Есть еще способы?
Вариант открыть в программе порт и выдавать данные по сети или использовать screen не интересны, в надежде найти более простой способ.

Намеки на то, что демоны должны писать и им не нужен терминал тоже не пройдут, в логах не отобразишь графику или кучи отладочной информации.


Единственное решение, которое я сейчас вижу это что-то вроде strace, которое перехватит write. передавать данные в консоль уже вероятно не получится, а вот читать вполне. Может кто рассказать, как работает strace? я как раз изучаю перехват вызовов функций, будет интересно написать свой strace.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Re: консоль демона
От: ilnar Россия  
Дата: 29.09.11 07:34
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?


MSV>Хочу получить доступ к stdin, stdout и stderr запущенной программы. Замкнуть их на stdin и компанию программы, откуда это делается, должно получиться управление консолью демона.


MSV>open() открывает /proc/pid/fd/ 0, 1, 2 , но дальше глухо, данных нет. либо так нельзя, либо я делаю неправильно.


может неправильно используешь? у меня что-то да и получается
Re[2]: консоль демона
От: MikelSV http://www.centerix.ru
Дата: 29.09.11 07:52
Оценка:
Здравствуйте, ilnar, Вы писали:

I>может неправильно используешь? у меня что-то да и получается


покажи код.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Re[3]: консоль демона
От: ilnar Россия  
Дата: 29.09.11 07:56
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Здравствуйте, ilnar, Вы писали:


I>>может неправильно используешь? у меня что-то да и получается


MSV>покажи код.


в одной консоли запускаю cat >fff1 2>fff2
в другой консоли:
1. echo 0 > /proc/<pid>/fd/0 приводит к появлению 0 в первой консоли
2. echo 1 > /proc/<pid>/fd/1 приводит к появлению 1 в файле fff1
3. echo 2 > /proc/<pid>/fd/2 приводит к появлению 2 в файле fff2
Re: консоль демона
От: ДимДимыч Украина http://klug.org.ua
Дата: 29.09.11 10:20
Оценка: +1
Здравствуйте, MikelSV, Вы писали:

MSV>Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?


Демон, если он правильный, закрывает десткрипторы стантартного ввода-вывода, поэтому в общем случае никак.
Для отладки у демонов зачастую есть ключ в аргументах командной строки, чтобы он не отключался от консоли.

MSV>Намеки на то, что демоны должны писать и им не нужен терминал тоже не пройдут, в логах не отобразишь графику или кучи отладочной информации.


Почему же не отобразишь, что мешает?

MSV>Единственное решение, которое я сейчас вижу это что-то вроде strace, которое перехватит write. передавать данные в консоль уже вероятно не получится, а вот читать вполне. Может кто рассказать, как работает strace? я как раз изучаю перехват вызовов функций, будет интересно написать свой strace.


Не проще ли для перехвата подложить свою библиотеку через LD_PRELOAD?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[4]: консоль демона
От: MikelSV http://www.centerix.ru
Дата: 29.09.11 12:22
Оценка:
Я читать хотел. Тот же процесс, но в обратную сторону.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Re[5]: консоль демона
От: ilnar Россия  
Дата: 29.09.11 12:27
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Я читать хотел. Тот же процесс, но в обратную сторону.


тогда вам надо делать по другому

mkfifo input_fifo
mkfifo output_fifo
daemon <input_fifo >output_fifo

демону на вход пишете в input_fifo, его ответы читаете из output_fifo
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.