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

Discussion in 'WASM.UNIX' started by Quantum, Nov 30, 2007.

  1. Quantum

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

    Blog Posts:
    0
    Запускаю процесс с редиректом stdout и stderr в /dev/null:

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

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

    gdb нет.
     
  2. Quantum

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

    Blog Posts:
    0
    Неужели в *никсах не предусмотрено ничего на этот счёт? Кстати, речь идёт об HP-UX.
     
  3. rei3er

    rei3er maxim

    Blog Posts:
    0
    Quantum
    man 2 dup
    man 2 dup2
     
  4. nester7

    nester7 New Member

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

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

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

    rei3er maxim

    Blog Posts:
    0
    Quantum
    боюсь нет такой команды
    можно попытаться через ptrace() инжектировать в нужный процесс код, который будет вызывать dup2() из его контекста
     
  7. Quantum

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

    Blog Posts:
    0
    Чтоб успешно выполнить trace, необходимо иметь права root, или самому запускать процесс, так? Перезапускать процесс нельзя (иначе и проблем бы не было) и админских прав у меня нет. Да и в любом случае, трассирование или перехват системных вызовов может отрицательно сказаться на производительности данного процесса.

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

    wasm_test wasm test user

    Blog Posts:
    0
    рискую показать глупость, ибо шибко близко с никсами не знаком, но не поможет ли ссылка /proc/PID/fd/1 ?
     
  9. rei3er

    rei3er maxim

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

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

    Blog Posts:
    0
    Great
    Что-то нету этой FS в HP-UX. Но, допустим, была бы возможность монтировать /proc, в /proc/pid/fs/1 я увижу ссылку на /dev/null... Что с ней делать?
     
  11. Quantum

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

    Blog Posts:
    0
    rei3er
    Хорошо, но всё равно боюсь, что упадёт производительность или сам процесс или watchdog засечёт, что этому процессу приходят "посторонние" сигналы и настучит на меня администратору. В общем, этот вариант слишком радикален (да и не факт, что ptrace вообще доступен, раз отладочные средства не установлены).

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

    rei3er maxim

    Blog Posts:
    0
    не знаю как в HP-UX, но в Linux для /dev/null нет ioctl-функциональности
    думаю, в HP-UX тоже нет
     
  13. Quantum

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

    Blog Posts:
    0
    Надумал я перезапустить этот процесс...

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

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

    nester7 New Member

    Blog Posts:
    0
    Дык это основная утилита для получения списка открытых файлов.

    lsof - list open files :)