2

実行するすべてのジョブの新しいプロセスにまたがる単純なジョブ スケジューラを実装しています。ジョブが終了したときに、実行されたアクションの数をスケジューラーに報告したいと考えています。

私が見つけた最も簡単な方法は、アクションの数をリターン コードとして終了することです。プロセスは、たとえば3、「3 つのアクションが実行されました」というリターン コードで終了します。

0しかし、プロセスが正常に終了したときにリターンコードを使用し、エラーが発生したときに他の値を使用するという標準(AFAIK)では、このアプローチは問題を引き起こすリスクがありますか?


注: 子プロセスは実行可能なスクリプトではなく、親プロセスのフォークであるため、外部からアクセスすることはできません。

4

4 に答える 4

2

あなたが探しているのはプロセス間通信です - そしてそれを行う方法はたくさんあります:

  • ソケット
  • 共有メモリ
  • パイプ
  • 排他的なファイル記述子(ある程度までは、可能であれば別のものを使用してください)
  • ...

リターン規則の変更は、通常のプログラマーがあえて違反するべきものではありません。

于 2013-07-04T10:36:41.193 に答える
1

唯一のリスクは、呼び出しスクリプトを混乱させることです。あなたが本当に欲しいのはカウントなので、あなたが説明することは理にかなっています。ジョーが言ったように、失敗には負の値を使用し、戻り値を説明する --help オプションを含めることを検討する必要があります...そうすれば、来月使用しようとしたときにこのコードが何をしているのかを理解できます.

于 2013-07-04T10:36:40.410 に答える
0

スケジューラが子にまたがっており、子ごとにパイプ、名前付きパイプ、またはおそらくUNIXドメインソケットを開き、それをプロセス間通信に使用して、そこで処理されたジョブを書き込むこともできると書いている場合。

特にあなたのプログラムが他の人に見える/使用可能である場合、またはとにかくそれらの決定を十分に文書化する場合、私は慣習に固執します。つまり、成功した場合は 0 を返します。

とにかく慣習とは別に、標準もあります。

于 2013-07-04T10:32:55.767 に答える
0

これにはログを使用します。実行されたアクションの数をスケジューラーに記録します。このようにして、日時やその他の追加情報も記録できます。

私は返品規則を変更しません...

于 2013-07-04T10:32:13.483 に答える