Windows 7 có sử dụng lại ID quá trình không?


19

Windows 7 có sử dụng lại ID quá trình không?

Lý do tôi hỏi câu hỏi này là do kinh nghiệm của tôi rằng Windows XP và Linux dường như không bao giờ tạo ID tiến trình cao hơn 20 thép30k. Tuy nhiên, máy Windows 7 của tôi sẽ đạt ID cao tới 5 trận10k hoặc hơn trong vòng vài giờ sau khi khởi động lại, đó là trải nghiệm bình thường của tôi từ xưa. Sáng hôm sau tôi kiểm tra và một số quy trình là 250k trở lên, không phải vậy.

Tôi đã kích hoạt tính năng kiểm tra bảo mật để ghi nhật ký quá trình tạo và chấm dứt. Không có gì tạo ra hàng trăm hoặc hàng ngàn hoặc quá trình. Chỉ 513 trong số các sự kiện này được đăng ký trong khoảng thời gian 24 giờ, nhưng hàng trăm ngàn ID quy trình đã được sử dụng, nó xuất hiện.

Tôi đã thử tìm kiếm câu hỏi của mình và một trong những câu hỏi được đề xuất trước đây đã chỉ ra một blog tuyệt vời của Mark Russinovich . Nhưng bài viết này, trong khi đọc rất thú vị, đã khiến tôi bối rối.


2
Tôi cá là họ đặt lại sau khi khởi động lại ...
Austin T French

3
Tất nhiên là có, vì không có quá trình nào khi khởi động, do đó tất cả các PID> 4 đều không được sử dụng.
grawity

1
Tôi nghĩ rằng quan điểm của anh ấy / cô ấy là trừ khi Windows cuối cùng sử dụng lại các PID, nó sẽ hết và yêu cầu khởi động lại.
Simon Richter

Câu trả lời:


22

Từ thử nghiệm của tôi, có vẻ như bạn có một giả định sai, các số PID không được đưa ra theo thứ tự liên tiếp. Điều này rất dễ dàng để chứng minh, thực hiện các lệnh sau từ dòng lệnh. Nó sẽ mở 3 bản notepad.

notepad & notepad & notepad

Trên máy của tôi, đây là bộ 3 bản sao mà tất cả được mở cùng một lúc.

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy bước nhảy của PID rất nhiều, nếu bạn mở chúng lên một lần, bạn cũng sẽ thấy rằng PID tiếp theo không phải lúc nào cũng lớn hơn lần trước. Ví dụ, tôi đã mở một bản sao thứ 4 của notepad và nhận được cái này

nhập mô tả hình ảnh ở đây

Vì vậy, có vẻ như Windows 7 sẽ chỉ chọn một PID không sử dụng ngẫu nhiên mỗi khi nó bắt đầu một quá trình, do đó rất có thể có một PID được sử dụng lại trong suốt quá trình chạy các cửa sổ mà không cần khởi động lại.


Tôi đã viết một tập lệnh powershell đơn giản (yêu cầu v2 hoặc mới hơn, xem câu trả lời này chỉnh sửa lịch sử cho phiên bản C #) để chứng minh chắc chắn về 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."

Chạy chương trình 10 lần, nó luôn mất thời gian giữa 134147khởi chạy notepad cho cùng một bộ PID được sử dụng lại (Tại sao con số này quá nhỏ? Vấn đề sinh nhật của tiện ích GO-GO !)


5
Windows NT làm cho nó thậm chí nhanh hơn bởi vì các bộ vi xử lý luôn là bội số của bốn .
grawity

Cảm ơn Scott. Có tập lệnh shell / tiện ích nào có thể theo dõi tất cả các quy trình số PID và đăng nhập nó vào một tệp có tên của quy trình mà chúng được gán không?
isildur

1
Bạn có thể, nhưng tôi không thấy sự hữu ích của nó. Bạn chỉ muốn theo dõi mọi quy trình bắt đầu hay bạn thực sự quan tâm đến PID?
Scott Chamberlain

Tại thời điểm này, tôi chỉ muốn biết quá trình nào đang được chạy nhiều lần đến nỗi nó đã đẩy số id của tiến trình vào phạm vi 500k +. Có lẽ một quá trình là sinh sản quá trình thậm chí. Đây chỉ là một máy tính để bàn win 7, diệt virus và firefox cơ bản, một hoặc hai trò chơi và chúng tôi không làm gì khác với nó. Cảm ơn đã trả lời.
isildur

Vì vậy, tôi đã loại bỏ một tiện ích cũ đã lập chỉ mục các ổ đĩa bằng cách sử dụng các tệp bó mà ai đó đã viết cách đây nhiều năm và hóa ra đây là thủ phạm tạo ra số lượng PID cao như vậy. Bây giờ, cùng một máy đã chạy trong nhiều tuần và số PID cao nhất cho đến nay là 12252.
isildur

1

Tôi đã chạy thử nghiệm trong một giờ và trong thời gian đó, 302 quy trình đã thoát. Trong số đó, 70 người có điểm chung là PID, vì vậy tôi sẽ nói rằng PID được sử dụng lại thường xuyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.