2009-05-05 15 views
0

私は、一連のプロセスが作成されていれば多少ばかげた質問をしています...これらは必ずしもある種の継承ではなく、プロセスのPIDは連続的でなければなりませんランダムなpids?プロセスのpidについて

+0

、\t は、彼らはまた、オペレーティングシステムに依存することは思いもしませんでした。.. – franvergara66

答えて

5

これはオペレーティングシステムによって決まります。

一般に、これらは通常、OSによって順番に割り当てられます。しかし、ほとんどのオペレーティングシステムの仕様では、プロセスIDの割り当てが確定的でない(つまり、ランダムであり、将来のバージョンなどで変更される可能性がある)ため、この動作は決定を下すものではありません。

0

プラットフォームによって異なりますが、pidの特定の順序に依存しないでください。

Windowsでは、pidは通常増加する数で割り当てられますが、プロセスが終了するとpidがリサイクルされ、新しいプロセスのpidが古いプロセスよりも低いケースが表示されます。また、pidはtidと同じ名前空間から出てくるので、新しいプロセスを起動するとpidが4ずつ増加することはありません。

0

あなたの視点から見ればランダムになります。システムはこれらの番号を管理し、プロセスの作成時にそれらの番号を割り当てます。私のシステムに現在あるPIDの簡単な一見は、それらがすべて4で割り切れることを示しています。

+0

私は、作成プロセスとリリースプロセスをシミュレートするセマフォーを使用してCでプログラムを実行しています。次に、PIDランダムプロセスを割り当てるかどうか、またはそれぞれが値から連続する数値を割り当てるかどうかはわかりません。可能な限りLinuxのクリアランスプロセス – franvergara66

4

Linuxでは、pidは一般的にシステム全体で順次割り当てられますが、定期的にラップされ、他の無関係なプロセスによって「ギャップ」が発生する可能性があります。極端な場合には、このラップアラウンドを引き起こすのに十分な幅の「ギャップ」があるかもしれません。特定の順序付けを仮定しないでください。代わりに、明示的に親プロセスまたは子プロセスのPIDを追跡してください。

+1

私は、作成プロセスとリリースプロセスをシミュレートするセマフォを使用してCでプログラムを実行しています。次に、PIDランダムプロセスを割り当てるかどうか、またはそれぞれが値から連続する番号を割り当てるかどうか、シミュレーションをLinuxのクリアランスプロセスとできるだけ似ているようにしたい場合 – franvergara66

+1

シミュレーションを作成する場合、ファジングの観点からの最良のアプローチは、複数のメソッド(ランダム、シーケンシャル、ほぼシーケンシャル)を持ち、何でも試してみることですあなたはそれぞれをテストしています。 – bdonlan

0

これらの子を作成している場合は、pidがわかります.pidはOSスケジューラに依存していますが、このことは気にしません。

2

はここにあなたのシステムが何をテストする方法は次のとおりです。

for i in $(seq 20); do ps; done | grep ps 

「PS」コマンドのPIDが連続プロセス、または任意の他の発信者が合理的に産卵することができるように期待できるとして、連続したに近いです。

私のcygwinターミナルはWindows上でランダムに割り振ります。私のウェブホストはそれらを順番に割り当てます(たぶん、他のユーザーやサーバーによって実行されるプロセスの間違いがあります)。

マルチユーザシステムのユーザ間で情報が漏洩する可能性があるため、シーケンシャルPID割り当てはわずかなセキュリティ上の問題であると考えている人もいます。

+3

より良いアプローチは、 'seq 20 'のiのために です。 sh -c 'echo $$'を実行します。 done psの出力をgreppingすると結果にノイズが発生する可能性があります(例えば、同時にpsを実行している他のユーザー...) – bdonlan

+0

確かに、私はコマンドラインから簡単な開発者テストを考えていました。あなたが出力に依存するスクリプトや何かを書いたのであれば、それは別の問題です。 –

1

AIXでは、より大きい(たとえば7桁の)PIDが頻繁に表示されますが、必ずしも半逐次的に割り当てる必要はありません(テストしたときにサイクリングしていたようですが、 、それはあまり意味しないかもしれません)。 AIX 5.3マシン上

新鮮ログイン:Linuxでの

$ ps 
    PID TTY TIME CMD 
1060910 pts/27 0:00 -ksh 
1155224 pts/27 0:00 ps 
$