Windows 7 işlem kimliklerini yeniden kullanıyor mu?


19

Windows 7 işlem kimliklerini yeniden kullanıyor mu?

Bu soruyu sormamın nedeni, Windows XP ve Linux'un asla 20-30k'dan daha yüksek işlem kimlikleri üretmediği deneyimimden kaynaklanıyor. Ancak, Windows 7 makinem yeniden başlatmanın ardından birkaç saat içinde 5-10k kadar yüksek kimliklere ulaşacak, bu da geçmişten gelen normal deneyimim. Ertesi sabah kontrol ediyorum ve bazı süreçler 250k veya daha yüksek, ki bu değil.

İşlem oluşturma ve sonlandırmayı günlüğe kaydetmek için güvenlik denetimi özelliğini etkinleştirdim. Hiçbir şey yüzlerce, binlerce veya süreç üretemez. Bu olayların sadece 513'ü 24 saatlik bir süre için kaydedilmiş olmakla birlikte, yüzbinlerce işlem kimliği kullanılmış gibi görünüyor.

Sorum için bir arama yapmayı denedim ve daha önce sorulan sorulardan biri Mark Russinovich'in muhteşem bloguna işaret etti . Ancak bu makale, çok ilginç bir okumaya rağmen, beni şaşırttı.


2
Bahse girerim yeniden başlatıldıktan sonra sıfırlanır ...
Austin T French

3
Tabii ki yaparlar, çünkü önyükleme başladığında hiçbir işlem yoktur, bu nedenle> 4'ten büyük tüm PID'ler kullanılmaz.
Yerçekimi

1
Demek istediğim, Windows sonunda PID'leri yeniden kullanmazsa, bitecek ve yeniden başlatma gerektirecekti.
Simon Richter

Yanıtlar:


22

Testlerimden bir yanlış varsayım olduğu anlaşılıyor, PID numaraları sıralı olarak verilmiyor. Bunu kanıtlamak çok kolaydır, komut satırından aşağıdaki komutu yapın. Not defterinin 3 kopyasını açmalıdır.

notepad & notepad & notepad

Makinemde, hepsinin aynı anda açıldığı 3 kopyanın PID'leri var.

resim açıklamasını buraya girin

PID'nin çok fazla atladığını görebileceğiniz gibi, onları birer birer açarsanız, bir sonraki PID'nin her zaman öncekinden daha büyük olmadığını da görürsünüz. Örneğin bir not defteri kopyası açtım ve anladım

resim açıklamasını buraya girin

Bu nedenle, Windows 7'nin her işlem başlattığında rastgele kullanılmayan bir PID seçeceği görülüyor, bu yüzden yeniden başlatma olmadan pencerelerin çalışması boyunca yeniden kullanılan bir PID olabilir.


Kesinlikle kanıtlamak için basit bir powershell betiği yazdım (v2 veya daha yeni bir sürüm gerektirir, bu cevapları C # sürümü için düzenleme geçmişine bakın)

$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."

Programı 10 kez Koşu hep arasındaki aldı 134ve 147yeniden kullanılabilir olması, aynı PID için not defteri lansmanları (Neden küçük? GO-GO Gadget yüzden bu sayıdır Doğum Sorunu !)


5
Windows NT bunu daha da hızlandırır çünkü PID'ler her zaman dört katlıdır .
Yerçekimi

Teşekkürler Scott. Tüm süreç PID numaralarını izleyebilecek ve atanmış oldukları işlemin adıyla bir dosyaya kaydedebilecek bir kabuk betiği / yardımcı programı var mı?
isildur

1
Yapabilirsin, ama faydasını görmüyorum. Sadece başlatılan her süreci izlemek mi istiyorsun yoksa PID'yi gerçekten önemsiyor musun?
Scott Chamberlain

Bu noktada, süreç kimlik numaralarını 500k + aralığına itecek şekilde hangi işlemlerin çalıştığını bilmek istiyorum. Belki de bir süreç yumurtlama süreçleridir. Bu sadece temel bir win 7 masaüstü, antivirüs ve firefox, bir veya iki oyun ve üzerinde başka bir şey yapmıyoruz. Cevaplar için teşekkürler.
isildur

Bu yüzden, birinin yıllar önce yazdığı toplu dosyaları kullanarak disk sürücülerini dizine alan eski bir yardımcı programı kaldırdım ve bunun bu kadar yüksek PID sayıları üreten suçlu olduğu ortaya çıktı. Şimdi aynı makine haftalarca çalıştı ve bugüne kadarki en yüksek PID numarası 12252.
isildur

1

Bir saat boyunca bir test yaptım ve o zaman 302 işlemden çıkıldı. Bunlardan 70'inin ortak bir PID'si vardı, bu yüzden PID'nin sık sık yeniden kullanıldığını söyleyebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.