У меня есть сценарий Perl, который работает как фоновый процесс на сервере электронной почты и пытается обнаружить скомпрометированные учетные записи электронной почты с помощью различных проверок очереди и файлов журнала. Я добавил обработчик сигнала USR1, который заставляет сценарий печатать некоторую информацию о себе во время выполнения. Это прекрасно работает, если я запускаю скрипт в фоновом режиме, а затем отправляю сигнал USR1, например:
./myscript.pl & kill -USR1 (PID)
Проблема в том, что если я выйду из этого сеанса оболочки, а затем снова подключусь, я больше не смогу получить какие-либо выходные данные, когда я использую команду kill -USR1
, потому что TTY, связанный с STDOUT для сценария, исчез.
Итак, мне интересно, есть ли способ получить TTY пользователя или процесса оболочки, который отправил сигнал в Perl, а затем направить вывод обратно в TTY вместо STDOUT. Я попытался использовать POSIX::ttyname(1)
в обработчике сигнала, но он возвращает TTY STDOUT скрипта (в данном случае это пустое значение), а не TTY пользователя, отправившего сигнал USR1.
Я видел в Perldoc для POSIX, что POSIX::sigaction
даст PID и UID процесса, сгенерировавшего сигнал, но я не знаю, есть ли хороший способ получить имя TTY из этой информации в Perl.
Любая помощь будет принята с благодарностью! Спасибо!
./myscript.pl > some.log &
, а затем отслеживать его с помощью командыtail -f some.log
с любого TTY, который вам нравится? - person nab   schedule 28.06.2012cat
выходного файла перед его удалением. - person Dave   schedule 28.06.2012