Windows 7 นำ ID กระบวนการมาใช้ซ้ำหรือไม่


19

Windows 7 นำ ID กระบวนการมาใช้ซ้ำหรือไม่

เหตุผลที่ฉันถามคำถามนี้เป็นเพราะประสบการณ์ของฉันที่ Windows XP และ Linux ดูเหมือนจะไม่เคยสร้างรหัสกระบวนการสูงกว่า 20–30k อย่างไรก็ตามเครื่อง Windows 7 ของฉันจะเข้าถึง ID สูงถึง 5–10k หรือประมาณสองสามชั่วโมงหลังจากการรีบูตซึ่งเป็นประสบการณ์ปกติของฉันในอดีต เช้าวันรุ่งขึ้นฉันตรวจสอบและกระบวนการบางอย่างอยู่ที่ 250k หรือสูงกว่าซึ่งไม่ใช่

ฉันเปิดใช้งานคุณสมบัติการตรวจสอบความปลอดภัยเพื่อบันทึกการสร้างและการยกเลิกกระบวนการ ไม่มีอะไรสร้างหลายร้อยหรือหลายพันหรือกระบวนการ มีการลงทะเบียนเหตุการณ์เหล่านี้เพียง 513 เหตุการณ์เป็นระยะเวลา 24 ชั่วโมง แต่มีการใช้ ID กระบวนการนับแสนรายการ

ฉันพยายามค้นหาคำถามของฉันและเป็นหนึ่งในคำถามปัญหาก่อนหน้านี้ขอชี้ไปที่บล็อกมหัศจรรย์มาร์ค Russinovich ของ แต่บทความนี้ในขณะที่การอ่านที่น่าสนใจมากทำให้ฉันงง


2
ฉันพนันได้เลยว่าพวกเขารีเซ็ตหลังจากรีบูต ...
Austin T French

3
แน่นอนว่าพวกเขาทำเพราะไม่มีกระบวนการเลยเมื่อบูตเริ่มดังนั้น PID ทั้งหมด> 4 จึงไม่ได้ใช้
grawity

1
ฉันคิดว่าประเด็นของเขา / เธอคือถ้า Windows ไม่ใช้ PID ในที่สุดมันจะหมดและต้องรีบูต
Simon Richter

คำตอบ:


22

จากการทดสอบของฉันดูเหมือนว่าคุณมีข้อสันนิษฐานที่ผิดพลาดเพียงข้อเดียวหมายเลข PID ไม่ได้ถูกจัดเรียงตามลำดับ สิ่งนี้ง่ายต่อการพิสูจน์ทำคำสั่งต่อไปนี้จากบรรทัดคำสั่ง ควรเปิดแผ่นจดบันทึก 3 ชุด

notepad & notepad & notepad

บนเครื่องของฉันนี่คือ PID ของ 3 ชุดที่เปิดทั้งหมดในเวลาเดียวกัน

ป้อนคำอธิบายรูปภาพที่นี่

ในขณะที่คุณเห็น PID กระโดดไปมาเยอะถ้าเปิดมันทีละครั้งคุณจะเห็นว่า PID ถัดไปนั้นไม่ใหญ่กว่าของ PID ก่อนหน้าเสมอไป ตัวอย่างเช่นฉันเปิดสำเนาแผ่นที่ 4 และรับสิ่งนี้

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นดูเหมือนว่า Windows 7 จะเลือก PID ที่ไม่ได้ใช้แบบสุ่มทุกครั้งที่เริ่มกระบวนการดังนั้นจึงมี PID ที่นำกลับมาใช้ใหม่ได้อย่างดีตลอดการใช้งานหน้าต่างโดยไม่ต้องรีบูต


ฉันเขียนสคริปต์ powershell ง่าย ๆ (ต้อง v2 หรือใหม่กว่าดูคำตอบนี้แก้ไขประวัติสำหรับรุ่น C #) เพื่อพิสูจน์ได้อย่างแน่นอน

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

การรันโปรแกรม 10 ครั้งมันใช้เวลาระหว่าง134และ147เปิดตัว notepad สำหรับ PID เดียวกันเพื่อนำมาใช้ซ้ำ (ทำไมตัวเลขนี้ถึงเล็กมากทำไมวันเกิดของ Gadget GO-GO !)


5
Windows NT ทำให้มันเร็วยิ่งขึ้นเนื่องจากPID นั้นมีค่าเป็นทวีคูณของสี่เสมอ
grawity

ขอบคุณสก็อต มีเชลล์สคริปต์ / ยูทิลิตี้ที่สามารถติดตามหมายเลข PID ของกระบวนการทั้งหมดและบันทึกลงในไฟล์ด้วยชื่อของกระบวนการที่ได้รับมอบหมายด้วยหรือไม่
isildur

1
คุณทำได้ แต่ฉันไม่เห็นประโยชน์ของมัน คุณแค่ต้องการติดตามทุกกระบวนการที่เริ่มต้นหรือคุณสนใจ PID จริงๆหรือไม่?
Scott Chamberlain

ณ จุดนี้ฉันแค่อยากรู้ว่ากระบวนการใดที่ทำงานอยู่หลายครั้งจนผลักหมายเลขรหัสกระบวนการลงในช่วง 500k + บางทีกระบวนการนั้นกำลังวางไข่กระบวนการแม้แต่ นี่เป็นเพียงเดสก์ท็อปที่ชนะพื้นฐาน 7 โปรแกรมป้องกันไวรัสและ Firefox เกมหรือสองเกมและเราไม่ได้ทำอย่างอื่นมากนัก ขอบคุณสำหรับคำตอบ
isildur

ดังนั้นฉันจึงลบยูทิลิตี้เก่าที่ทำดัชนีดิสก์ไดรฟ์โดยใช้ไฟล์แบทช์ซึ่งมีคนเขียนเมื่อหลายปีก่อนและปรากฎว่านี่เป็นผู้ร้ายที่สร้างหมายเลข PID สูง ตอนนี้เครื่องเดียวกันวิ่งมาหลายสัปดาห์แล้วและหมายเลข PID ที่สูงที่สุดคือ 12252
isildur

1

ฉันทำการทดสอบเป็นเวลาหนึ่งชั่วโมงและในช่วงเวลานั้นมีกระบวนการ 302 รายการที่ออก ในบรรดา 70 มี PID ที่เหมือนกันดังนั้นฉันจะบอกว่า PID ได้รับการใช้ซ้ำบ่อยครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.