電子メール サーバー上でバックグラウンド プロセスとして実行される Perl スクリプトがあり、キュー ファイルとログ ファイルのさまざまなチェックを通じて侵害された電子メール アカウントを検出しようとします。USR1 シグナルのハンドラーを追加しました。これにより、スクリプトの実行中にスクリプト自体に関する情報が出力されます。これは、スクリプトをバックグラウンドで開始してから、次のように USR1 シグナルを送信するとうまく機能します。
./myscript.pl & kill -USR1 (PID)
問題は、そのシェル セッションを終了してから再度接続するとkill -USR1
、スクリプトの STDOUT に関連付けられた TTY がなくなったため、コマンドを使用しても出力が得られないことです。
したがって、Perl でシグナルを送信したユーザーまたはシェル プロセスの TTY を取得し、出力を STDOUT ではなく TTY に戻す方法があるかどうか疑問に思っています。シグナル ハンドラーで使用POSIX::ttyname(1)
してみましたが、USR1 シグナルを送信したユーザーの TTY ではなく、スクリプトの STDOUT (この場合は空の値) の TTY が返されます。
シグナルを生成したプロセスの PID と UID を提供するPOSIX の Perldoc を見ましたがPOSIX::sigaction
、Perl でその情報から TTY 名を取得する良い方法があるかどうかはわかりません。
どんな助けでも大歓迎です!ありがとう!