Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm thế nào để monitor windows process?

    Mình đang cần viết một cái tool/dll nhỏ dùng để giám sát một process cụ thể nào đó trong windows.
    Yêu cầu đơn giản chỉ là monitor xem cái process đó có đang chạy hay ko? Nếu process đó bị kill bởi bất kì lí do gì thì phải báo lại cho app.

    Vd: app của mình đang chạy sẵn và nó sẽ giám sát nginx, bất cứ khi nào nginx chạy thì app sẽ detect và chuyển trạng thái nào đó (hiện thông báo, bật icon xanh...) và ngược lại khi tắt nginx thì app sẽ lại trở lại như cũ.

    Mình có tìm hiểu sơ qua thì có vẻ sử dụng thuần túy Win32 API khá là phức tạp, trong Boost hình như có sẵn thư viện xử lý cái này. Do yêu cầu gấp quá nên mình ko còn nhiều thời gian nghiên cứu, mong ai đó chỉ cho mình hướng đi nhanh nhất có thể. Mình xin cám ơn [IMG]images/smilies/smile.png[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    giải pháp dùng để khi 1 process bị ngắt mà nhận ra ngay thì mình không rõ, nhưng có một cách đơn giản là cứ sau 1 khoảng thời gian nhất định (5s chẳng hạn) bạn sẽ liệt kê lại process 1 lần để kiểm tra process còn sống hay không
    bạn có thể tìm hiểu các hàm và ví dụ ở đây: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    cái này khá đơn giản nên mình nghĩ không cần thiết tới mức phải dùng boost
    chúc bạn may mắn

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Sử dụng PsSetCreateProcessNotifyRoutine, API này cung cấp tất cả khả năng bạn muốn đấy!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi dungcoi
    giải pháp dùng để khi 1 process bị ngắt mà nhận ra ngay thì mình không rõ, nhưng có một cách đơn giản là cứ sau 1 khoảng thời gian nhất định (5s chẳng hạn) bạn sẽ liệt kê lại process 1 lần để kiểm tra process còn sống hay không
    bạn có thể tìm hiểu các hàm và ví dụ ở đây: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    cái này khá đơn giản nên mình nghĩ không cần thiết tới mức phải dùng boost
    chúc bạn may mắn
    Cách này là hợp lý với usermode nhất.
    ngoài ra, bạn có thể dùng 1 hàm khác, cũng tương đương
    NtQuerySystemInformation với tham số SYSTEM_PROCESS_INFORMATION

    PsSetCreateProcessNotifyRoutineEx và PsSetCreateProcessNotifyRoutine chỉ dùng được ở kernel mode

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình có giải pháp cho bạn chẳn hạn như lấy handle process để đưa vào hàm WaitForSingleObject.
    Còn có thể GetExitCodeProcess để lấy exitcode process,nó trả về STILL_ALIVE là vẫn còn sống.
    GetExitCodeProcess bạn để vào vòng while(true) để monitor.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •