1

だから私はこのプロジェクトで、より環境に優しい牧草地に移動したソフトウェアエンジニアから継承した、この古くて厄介なCコードを持っています. 良いニュースは... IT RUNS! さらに良いニュースは、バグがないように見えることです。

問題は、コマンド ラインで一連の起動パラメータを入力してサーバー上で実行するように設計されていることです。現在、このサーバーが再構成可能であるという新しい要件があります (それが来るのを見ていませんでした...)。基本的に、サーバーが UDP 経由でコマンドを受信すると、このプログラムを開始するか、停止するか、UDP ポート経由で渡された新しい起動パラメーターで再起動します。

基本的に、難読化されたプログラムを実行するために使用することを検討しているコードは次のようなものです (申し訳ありませんが、実際のソースが目の前にありません。午前 12 時 48 分で、眠れないので、疑似以下のコードで十分です):

//my "bad_process_manager"

int manage_process_of_doom() {
  while(true) {
    if (socket_has_received_data) {
      int return_val = ParsePacket(packet_buffer);
      // if statement ordering is just for demonstration, the real one isn't as ugly...
      if (packet indicates shutdown) {
        system("killall bad_process");  // process name is totally unique so I'm good?
      } else if (packet indicates restart) {
        system("killall bad_process");  // stop old configuration
        // start with new parameters that were from UDP packet...
        system("./my_bad_process -a new_param1 -b new_param2 &");
      } else {  // just start
        system("./my_bad_process -a new_param1 -b new_param2 &");
    }
  }
}

したがって、私がしなければならない system() 呼び出しの結果として、すべての system() 呼び出しなしでそうするよりきちんとした方法があるかどうか疑問に思っています。Cファイルをクラックオープンせずに、可能なすべてのオプションを使い果たしたことを確認したい. これらすべての値をその場で実際に操作すると、継承したファイル全体を書き直さなければならなくなるのではないかと心配しています。プログラムの実行中に構成できるように設計されていないからです。

また、プロセスの開始に関して、コマンドラインからその行を実行した場合に端末の制御を取り戻すのと同じように、system() 呼び出しで「&」をスローするとすぐに戻ると想定するのは正しいですか? 最後に、「マネージャー」が実行されているのと同じ端末画面に stderr (およびおそらく stdout) が出力されるようにする方法はありますか?

よろしくお願いします。

4

1 に答える 1