質問: `ps` コマンドなどを実行すると、ある時刻の特定のプロセスに、何の pid が割り振られているかを確認することができます。 別の時刻にもう一回 `ps` を実行すると、先ほど確認した pid を持つプロセスがあるかどうかを確認することができますが、 linux/unix では pid が使い回されることを考えると、この、別の時刻において取得された pid に紐づいたプロセスは、必ずしも前に取得した際のプロセスとは同一ではないと思っています。 たとえば、 pid を記録しておいて、のちのちにプロセス制御でその pid を利用する場合に、万が一、再利用によって別プロセスになっていた場合に、事故のようなことが起きたら嫌だな、と考えると、以下の疑問が生じました。 ### 質問 ある別々の時刻でプロセスの pid を取得したときに、これらに対応しているプロセスが同一のものであるかどうかを確認するための方法はありますか?
回答: この記事だと、PIDと開始時間を組み合わせるのが良い、という意見ですね。 Uniquely identifying processes in Linux > > Thankfully, the kernel associates another useful piece of information with a process: it’s start time. The combination of PID and start time provides a reasonably robust way of uniquely identifying processes over the life-time of a system. (For the pedantic, if a process can be created and correctly reaped all within the granularity of the clock, then it would be theoretically possible for multiple different processes to have existed in the system that have the same PID and start time, but that is unlikely to be a problem in practise.) > > > ありがたいことに、カーネルは別の有用な情報をプロセスに関連付けます。それは開始時間です。PIDと開始時間の組み合わせは、システムの存続期間にわたってプロセスを一意に識別する合理的で堅牢な方法を提供します。(理論的には、プロセスが作成され、クロックの精度ですべて正しく処理されるのであれば、同じPIDと開始時間を持つ複数の異なるプロセスがシステムに存在することは理論的には可能です。実際には問題になる可能性は低いです。) > > > UIDとかも含めれば比較が簡単で良いかも。 @cubickさんの示したプログラムと引数も単純な文字列比較で、割と厳密に出来そうですね。 3. ps コマンドからわかる事 標準フォーマット指定子 最初に、時間にあたりを付けて検索した記事が以下になります。 Linuxプロセスの起動時刻を調べる方法 How to get the start time of a long-running Linux process? How to get the process start date and time