MSDN page on Job Objects giải thích:Làm cách nào để kiểm soát đáng tin cậy tuổi thọ của quy trình phụ mà không cần phải có đối tượng công việc lồng nhau?
Quy trình chỉ có thể được kết hợp với một công việc. Không thể lồng nhau công việc. Khả năng làm tổ được thêm vào trong Windows 8 Consumer Preview và Windows Server 8 Beta.
Thật không may, có vẻ như đây chỉ là những gì tôi cần. Tôi đang làm việc với một cây quá trình như thế này:
server.exe
|
+--+ utility.exe
|
+--+ launcherA.exe
| |
| +--+ programA.exe
| |
| +--+ subProcessA.exe
|
+--+ launcherB.exe
|
+--+ programB.exe
tôi cố gắng thực hiện các hành vi sau đây:
Nếu
server.exe
được chấm dứt bằng cách nào đó (vì nó bị treo, hoặc do người dùng quyết định chấm dứt bằng cách sử dụng trình quản lý tác vụ hoặc đơn giản vì nó hoàn thành việc thực hiện), nó sẽ gỡ tất cả các tiến trình bên dưới nó. Tôi sử dụng một đối tượng công việc cho việc này.Nếu
launcherA.exe
hoặclaunchedB.exe
chấm dứt vì một lý do nào đó, chúng gỡ xuống tất cả các quy trình bên dưới chúng. Thật không may tôi không thể sử dụng các đối tượng công việc ở đây vì các đối tượng công việc không làm tổ.
Vì vậy, tôi thường quản lý để tạo các quy trình 'lơ lửng' bằng cách giết các quy trình tùy ý trong cây trên. Tôi cố gắng tránh để lại bất kỳ quy trình cũ nào, nhưng tất cả các giải pháp tôi đã đưa ra cho đến nay dựa vào một số loại quy trình giám sát để theo dõi các quá trình khác - nhưng nếu cơ quan giám sát bị giết, tất cả hy vọng đều bị mất.
Giữ công việc cấp cao nhất trên server.exe và đặt server.exe làm cơ quan giám sát. Bằng cách đó, nếu cơ quan giám sát bị chết, đối tượng công việc sẽ gỡ bỏ tất cả các quy trình con. –
@RaymondChen: Nghe hay đấy. Nếu tôi tạo đồng hồ 'server.exe'' launcherA.exe' và 'launchB.exe', tôi sẽ thông báo khi chúng bị chấm dứt vì một lý do nào đó. Tuy nhiên - làm thế nào tôi có thể tìm ra các tiến trình con tại thời điểm đó? Tôi đang sử dụng 'WaitForSingleObject' để nhận được thông báo về quá trình kết thúc, nhưng tại thời điểm đó tôi không thể nói những gì các tiến trình con là vì chúng đã được reparented. Tôi đã xem xét 'CreateToolhelp32Snapshot' để theo dõi các tiến trình con, hoặc có thể là WMI. Có thể có giải pháp dễ dàng hơn không? –
Bạn nói rằng bạn đã có một giải pháp với quy trình giám sát.Chỉ cần sử dụng lại giải pháp đó (bao gồm cả phần theo dõi các quy trình con), nhưng làm cho server.exe trở thành cơ quan giám sát. –