Apakah Windows 7 menggunakan kembali ID proses?

19

Apakah Windows 7 menggunakan kembali ID proses?

Alasan saya mengajukan pertanyaan ini adalah karena pengalaman saya bahwa Windows XP dan Linux tampaknya tidak pernah menghasilkan ID proses yang lebih tinggi dari 20-30k. Namun, mesin Windows 7 saya akan mencapai ID setinggi 5 - 10 ribu atau lebih dalam beberapa jam setelah reboot, yang merupakan pengalaman normal saya dari masa lalu. Pagi berikutnya saya memeriksa dan beberapa proses 250k atau lebih tinggi, yang tidak.

Saya mengaktifkan fitur audit keamanan untuk mencatat pembuatan dan penghentian proses. Tidak ada yang menghasilkan ratusan atau ribuan atau proses. Hanya 513 dari peristiwa ini yang terdaftar untuk periode 24 jam, namun ratusan ribu ID proses telah digunakan, tampaknya.

Saya mencoba mencari pertanyaan saya dan salah satu pertanyaan yang disarankan yang diajukan sebelumnya menunjuk ke blog Mark Russinovich yang luar biasa . Tapi artikel ini, walaupun bacaannya sangat menarik, membuat saya bingung.

isildur
sumber
2
Saya yakin mereka mengatur ulang setelah reboot ...
Austin T French
3
Tentu saja mereka lakukan, karena tidak ada proses sama sekali ketika boot dimulai, oleh karena itu semua PID> 4 tidak digunakan.
grawity
1
Saya pikir maksudnya adalah bahwa kecuali jika Windows akhirnya menggunakan PID, itu akan habis dan membutuhkan reboot.
Simon Richter

Jawaban:

22

Dari pengujian saya tampaknya Anda memiliki satu asumsi salah, nomor PID tidak diberikan secara berurutan. Ini sangat mudah dibuktikan, lakukan perintah berikut dari baris perintah. Seharusnya membuka 3 salinan notepad.

notepad & notepad & notepad

Di mesin saya di sini adalah PID's dari 3 salinan yang semuanya dibuka pada waktu yang sama.

masukkan deskripsi gambar di sini

Seperti Anda dapat melihat banyak PID melompat-lompat, Jika Anda membukanya satu per satu, Anda juga akan melihat bahwa PID berikutnya tidak selalu lebih besar dari yang sebelumnya. Misalnya saya membuka salinan notepad ke-4 dan mendapatkan ini

masukkan deskripsi gambar di sini

Jadi tampaknya Windows 7 hanya akan memilih PID acak yang tidak digunakan setiap kali memulai proses, sehingga sangat baik jika PID digunakan kembali selama menjalankan windows tanpa reboot.


Saya menulis skrip PowerShell sederhana (memerlukan v2 atau yang lebih baru, lihat jawaban ini edit riwayat untuk versi C #) untuk membuktikannya pasti

$h = new-object 'System.Collections.Generic.HashSet[string]'
do {
    $proc = Start-Process 'notepad' -PassThru
    $id = $proc.Id
    Stop-Process $id
} while ($h.Add($id))
$count = $h.Count
Write-Host "Took $count PIDs to hit a duplicate, the duplicate was $id."

Menjalankan program 10 kali selalu antara 134dan 147meluncurkan notepad untuk PID yang sama untuk digunakan kembali (Mengapa angka ini sangat kecil? Masalah Gadget Ulang Tahun GO-GO !)

Scott Chamberlain
sumber
5
Windows NT membuatnya lebih cepat karena PID selalu merupakan kelipatan empat .
grawity
Terima kasih Scott. Apakah ada skrip shell / utilitas yang dapat melacak semua proses nomor PID dan mencatatnya ke file dengan nama proses mereka ditugaskan juga?
isildur
1
Anda bisa, tetapi saya tidak melihat manfaatnya. Apakah Anda hanya ingin melacak setiap proses yang dimulai atau apakah Anda benar-benar peduli tentang PID?
Scott Chamberlain
Pada titik ini, saya hanya ingin tahu proses apa yang sedang dijalankan berkali-kali sehingga mendorong nomor proses id ke dalam kisaran 500k +. Mungkin suatu proses bahkan merupakan proses pemijahan. Ini hanya dasar win 7 desktop, antivirus dan firefox, satu atau dua game dan kami tidak melakukan banyak hal di dalamnya. Terima kasih atas balasannya.
isildur
Jadi saya menghapus sebuah utilitas lama yang mengindeks disk drive menggunakan file batch yang telah ditulis seseorang beberapa tahun yang lalu dan ternyata ini adalah biang keladinya menghasilkan angka PID tinggi. Sekarang mesin yang sama memiliki berlari selama berminggu-minggu dan jumlah PID tertinggi sampai saat ini adalah 12252.
Isildur
1

Saya menjalankan tes selama satu jam dan pada saat itu 302 proses keluar. Dari mereka, 70 memiliki PID yang sama, jadi saya akan mengatakan PID sering digunakan kembali.

Data Munger
sumber