0

いくつかの子を生成する Perl スクリプトがあります。それらはすべて実行にかなりの時間がかかり、途中でディレクトリとファイルが作成されます。子供たちが自然死する前に変更したいことがよくあるので、すべてをシャットダウンし (これにはいくつかgrepkill呼び出しが含まれます)、子供たちが作成したファイルを削除する必要があります。大したことはないのですが、首が少し痛いです。子がすべて監視されるセットアップを作成したいので、親を再起動すると、まだ実行されている古い子が報告されます。

これまでのところ、実行した子のログ ファイルを PID と共に保持し、それをチェックして、親スクリプトの開始時に更新することをお勧めします。まだ実行中のすべての子を強制終了して報告し、ユーザーが再実行する前にディレクトリとファイルを手動でクリーンアップできるようにします。

私の質問はこれです: ログ ファイルに子を追加するにはどうすればよいですか? 自動的にそれを処理できるトリガーを設定する方法はありますか、それとも新しいプロセスが開始されるコード内の任意の場所でそれを行うことを覚えておく必要がありますか?

ps これを達成するためのより良い方法の提案を歓迎します!

4

1 に答える 1

0

シグナルハンドラーはどうですか?親は、起動したジョブのpidを追跡できます(必要に応じて、ハンドラーで取得されたpidを追跡できますSIGCHLD)。すべてを途中で終了したい場合は、すべての子を殺して後片付けをするように親に合図してください。子プロセスもPerlスクリプトである場合は、子にシグナルハンドラーを配置して、子プロセスが後でクリーンアップされるかどうかを確認できます。

于 2011-03-10T17:42:04.303 に答える