Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?
Хочу получить доступ к stdin, stdout и stderr запущенной программы. Замкнуть их на stdin и компанию программы, откуда это делается, должно получиться управление консолью демона.
open() открывает /proc/pid/fd/ 0, 1, 2 , но дальше глухо, данных нет. либо так нельзя, либо я делаю неправильно.
Есть еще способы?
Вариант открыть в программе порт и выдавать данные по сети или использовать screen не интересны, в надежде найти более простой способ.
Намеки на то, что демоны должны писать и им не нужен терминал тоже не пройдут, в логах не отобразишь графику или кучи отладочной информации.
Единственное решение, которое я сейчас вижу это что-то вроде strace, которое перехватит write. передавать данные в консоль уже вероятно не получится, а вот читать вполне. Может кто рассказать, как работает strace? я как раз изучаю перехват вызовов функций, будет интересно написать свой strace.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, MikelSV, Вы писали:
MSV>Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?
MSV>Хочу получить доступ к stdin, stdout и stderr запущенной программы. Замкнуть их на stdin и компанию программы, откуда это делается, должно получиться управление консолью демона.
MSV>open() открывает /proc/pid/fd/ 0, 1, 2 , но дальше глухо, данных нет. либо так нельзя, либо я делаю неправильно.
может неправильно используешь? у меня что-то да и получается
Здравствуйте, ilnar, Вы писали:
I>может неправильно используешь? у меня что-то да и получается
покажи код.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, 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
Здравствуйте, MikelSV, Вы писали:
MSV>Как подключиться к консоли уже запущенного процесса в линуксе и сказать, что так и было?
Демон, если он правильный, закрывает десткрипторы стантартного ввода-вывода, поэтому в общем случае никак.
Для отладки у демонов зачастую есть ключ в аргументах командной строки, чтобы он не отключался от консоли.
MSV>Намеки на то, что демоны должны писать и им не нужен терминал тоже не пройдут, в логах не отобразишь графику или кучи отладочной информации.
Почему же не отобразишь, что мешает?
MSV>Единственное решение, которое я сейчас вижу это что-то вроде strace, которое перехватит write. передавать данные в консоль уже вероятно не получится, а вот читать вполне. Может кто рассказать, как работает strace? я как раз изучаю перехват вызовов функций, будет интересно написать свой strace.
Не проще ли для перехвата подложить свою библиотеку через LD_PRELOAD?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Я читать хотел. Тот же процесс, но в обратную сторону.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?