2

Unix システムでは、PID は特定の時点でのみ一意です。元のプロセスが終了した後、過去に使用された PID を再使用できるため、特定の時間間隔で一意ではありません。ブート以降にシステムで実行されていたすべてのプロセスの履歴データを保存するには、ブート以降に一意である識別子が必要です。

そのための標準またはベストプラクティスはありますか? 以下の私の意図した解決策に何か問題や不足はありますか?

意図したソリューション

PID をプロセス開始時刻 (標準のUnix 時間として) と一緒に一意のプロセス識別子として使用することは理にかなっているようです。そのような識別子は、再起動間でも一意です。

利点

  1. PID とプロセス開始時間の両方が十分に明確に定義されており、すべての Unix ライクなシステムで意味があります。
  2. どちらの値も整数で、処理が比較的簡単です。
  3. プロセスは、開始時間とそれに続く PID で明確にソートできます。
  4. 両方の値は、プロセスの一意の識別以外にも使用できます。

短所

  1. external utility を呼び出す以外に、プロセスの開始時刻を取得する移植可能な方法はないようですps。たとえば、シェルの場合: date -d "$(ps -p $PID -o lstart=)" +%s. Linux では、プロセスの開始時刻を計算することは可能です/proc/$PID/statが、この方法は他のシステムでは機能しません。
  2. 前のポイントの事実により、移植可能な方法は不必要に遅くなり、リソースを集中的に使用する可能性があります。
4

1 に答える 1

1

ntp サービスは常にシステム時刻を調整します。これは、「ps -p $pid -o lstart」から読み取られる開始時刻に影響します。その結果、システム時刻が調整された後、異なる開始時刻を取得できます。

于 2013-10-17T05:33:50.200 に答える