Редирект уже запущенного процесса.

Тема в разделе "WASM.UNIX", создана пользователем Quantum, 30 ноя 2007.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Запускаю процесс с редиректом stdout и stderr в /dev/null:

    ./process > /dev/null 2>&1 &

    Но потом, допустим, нужно посмотреть что этот процесс пишет в stdout/stderr. Можно как-то переопределить редирект уже запущенного процесса?

    gdb нет.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Неужели в *никсах не предусмотрено ничего на этот счёт? Кстати, речь идёт об HP-UX.
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Quantum
    man 2 dup
    man 2 dup2
     
  4. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    rei3er
    А там что, есть и pthread_create_remote() чтобы нужный код выполнить? :)
    Я так понял, ему нужно извне как-то подействовать на процесс, а не переписывать его из исходников.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rei3er
    nester7
    Да, я что-то тоже не очень понял :) Нужна команда, которая бы для заданного PID давала возможность динамически изменять описатели stdin/stdout/stderr. Ну, как renice для приоритета. В крайнем сучае можно написать для этого прогу, но я не представляю себе как это всё устроено в HP-UX. Нет ни отладчика ни административных прав.
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Quantum
    боюсь нет такой команды
    можно попытаться через ptrace() инжектировать в нужный процесс код, который будет вызывать dup2() из его контекста
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Чтоб успешно выполнить trace, необходимо иметь права root, или самому запускать процесс, так? Перезапускать процесс нельзя (иначе и проблем бы не было) и админских прав у меня нет. Да и в любом случае, трассирование или перехват системных вызовов может отрицательно сказаться на производительности данного процесса.

    А может у /dev/null есть какие-то ioctrl, дающие возможность перенаправлять В/В с заданного pid?
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    рискую показать глупость, ибо шибко близко с никсами не знаком, но не поможет ли ссылка /proc/PID/fd/1 ?
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    права root'а нужны если процесс запущен от имени root'a
    для трассировки "своих" процессов права root'а не нужны
    перезапускать процесс не обязательно
    можно подключиться к уже работающему процессу
    нет
    какой смысл?
    это всего лишь символическая ссылка
    ее изменение не повлияет на вывод
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Great
    Что-то нету этой FS в HP-UX. Но, допустим, была бы возможность монтировать /proc, в /proc/pid/fs/1 я увижу ссылку на /dev/null... Что с ней делать?
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rei3er
    Хорошо, но всё равно боюсь, что упадёт производительность или сам процесс или watchdog засечёт, что этому процессу приходят "посторонние" сигналы и настучит на меня администратору. В общем, этот вариант слишком радикален (да и не факт, что ptrace вообще доступен, раз отладочные средства не установлены).

    Ну, раз /dev/null - это драйвер, у него могут быть предусмотрены какие-то коды для перехвата.
     
  12. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    не знаю как в HP-UX, но в Linux для /dev/null нет ioctl-функциональности
    думаю, в HP-UX тоже нет
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Надумал я перезапустить этот процесс...

    Всем спасибо за участие.

    Кстати, информацию о файлах открытых заданным процессом можно получить ещё и утилитой lsof -p pid
     
  14. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Дык это основная утилита для получения списка открытых файлов.

    lsof - list open files :)