Запускаю процесс с редиректом stdout и stderr в /dev/null: ./process > /dev/null 2>&1 & Но потом, допустим, нужно посмотреть что этот процесс пишет в stdout/stderr. Можно как-то переопределить редирект уже запущенного процесса? gdb нет.
rei3er А там что, есть и pthread_create_remote() чтобы нужный код выполнить? Я так понял, ему нужно извне как-то подействовать на процесс, а не переписывать его из исходников.
rei3er nester7 Да, я что-то тоже не очень понял Нужна команда, которая бы для заданного PID давала возможность динамически изменять описатели stdin/stdout/stderr. Ну, как renice для приоритета. В крайнем сучае можно написать для этого прогу, но я не представляю себе как это всё устроено в HP-UX. Нет ни отладчика ни административных прав.
Quantum боюсь нет такой команды можно попытаться через ptrace() инжектировать в нужный процесс код, который будет вызывать dup2() из его контекста
Чтоб успешно выполнить trace, необходимо иметь права root, или самому запускать процесс, так? Перезапускать процесс нельзя (иначе и проблем бы не было) и админских прав у меня нет. Да и в любом случае, трассирование или перехват системных вызовов может отрицательно сказаться на производительности данного процесса. А может у /dev/null есть какие-то ioctrl, дающие возможность перенаправлять В/В с заданного pid?
рискую показать глупость, ибо шибко близко с никсами не знаком, но не поможет ли ссылка /proc/PID/fd/1 ?
права root'а нужны если процесс запущен от имени root'a для трассировки "своих" процессов права root'а не нужны перезапускать процесс не обязательно можно подключиться к уже работающему процессу нет какой смысл? это всего лишь символическая ссылка ее изменение не повлияет на вывод
Great Что-то нету этой FS в HP-UX. Но, допустим, была бы возможность монтировать /proc, в /proc/pid/fs/1 я увижу ссылку на /dev/null... Что с ней делать?
rei3er Хорошо, но всё равно боюсь, что упадёт производительность или сам процесс или watchdog засечёт, что этому процессу приходят "посторонние" сигналы и настучит на меня администратору. В общем, этот вариант слишком радикален (да и не факт, что ptrace вообще доступен, раз отладочные средства не установлены). Ну, раз /dev/null - это драйвер, у него могут быть предусмотрены какие-то коды для перехвата.
Надумал я перезапустить этот процесс... Всем спасибо за участие. Кстати, информацию о файлах открытых заданным процессом можно получить ещё и утилитой lsof -p pid