長期実行プロセスがあり、次を使用してプロセスを停止して再起動するとします。
kill -STOP <pid>
kill -CONT <pid>
環境変数であっても、一部のメモリー場所であっても、実行中のプロセスを変更する一貫した方法はありますか?
このような:
kill -STOP <pid>
change_process <pid> --new 'value'
kill -CONT <pid>
明らかにこれは完全に偽のAPIですが、あなたがアイデアを得たことを願っています。
答え1
いいえ。停止したプロセスが停止しました。
実行中のプロセスの設定を変更する従来の方法は、構成ファイルの状態を制御するためにアプリケーションを教えることです。 inotify時計を使用するか、修正タイムスタンプを定期的に確認してください。いずれにしても、アプリケーションがその設定ファイルが変更されたことを発見したら、もう一度お読みください。
別のアプローチは、再起動または再構成を強制する信号を捕捉することである。たとえば、Apache は SIGHUP でソフト再起動を実行します。つまり、すべての子プロセスを終了し、構成ファイルを再読み込みして基本プロセスを再開します。この方法は、マルチファイル構成がある場合に便利です。含まれる各サブプロファイルにオブザーバを配置することは困難です。
環境変数は若干異なります。アプリケーションの起動時にプロセスメモリにコピーされ、プロセスの外部からアクセスできません。プロセスに自分の環境を変更するように要求することができ、この環境を子プロセスに提供できます(子プロセスもそれを変更できます)。ただし、外部では変更できません。
この場合、アプリケーションを一時停止し、構成を広範囲に変更してから構成を再読み込みして再起動する場合は、理論的にはSTOP-CONTが役立ちます。ただし、(SIGSTOP-SIGCONT)は設定を変更するためのより多くの時間を提供するだけです。アプリケーションを完全に停止する方が簡単かもしれません。