2010-08-17 18 views
24

Có ai biết cách xem quy trình cho tất cả người dùng sử dụng lệnh top trong Cygwin (một phần của thư viện procps trong Hệ thống).Lệnh trên cùng Cygwin - Xem quy trình cho tất cả người dùng

Tôi biết điều này có thể được thực hiện trong * nix nhưng tôi đang gặp khó khăn trong Cygwin. Tôi đã thử sử dụng pslist nhưng nó không hoạt động trong một giao diện điều khiển SSH putty.

Tôi cần có giải pháp nơi tôi có thể thấy hộp thoại giống như top bằng SSH. Tôi không có bất kỳ truy cập NTLM SSO nào đối với khách Win2k3, vì vậy ssh là cách duy nhất.

+0

Sau nhiều năm làm việc với Cygwin tắt và bật, tôi đã bị ảnh hưởng khi sử dụng ProcessExplorer và Windows 7+ được tích hợp trong Trình theo dõi tài nguyên. Tôi thực sự thích cả hai và đã phát hiện ra rằng Process Monitor là một công cụ tuyệt vời để kiểm tra các quá trình rất nhấn mạnh vào tập tin I/O. –

+0

Làm cách nào để bạn sử dụng 'PROCEXP.EXE' hoặc' PROCMON.EXE' trên 'ssh'? Họ có chế độ đầu cuối không? –

Trả lời

32

top chỉ hiển thị các quy trình Cygwin. ps -W cũng sẽ liệt kê các quy trình của Windows.

+1

Liên kết sau hiển thị một cách: http://superuser.com/questions/751688/is-there-a-way-to-show-windows-processes-in-cygwin-constantly/887564#887564 – philwalk

+0

Hoặc là '-W Công việc 'hoặc' --windows', xem 'ps --help' – Timo

3

Nhiều lần lệnh "danh sách nhiệm vụ" giúp công việc được thực hiện hiệu quả hơn. Nó được xây dựng trong các cửa sổ, chỉ cần chắc chắn rằng thư mục System32 của bạn là một phần của hồ sơ bash PATH của bạn. Ngoài ra còn có procps chính nó. Bạn cũng nên thử sử dụng mintty cho thiết bị đầu cuối của bạn. Bạn luôn có thể thử đính kèm bất kỳ ứng dụng tác vụ nào để sàng lọc và sử dụng đồng hồ để thăm dò thông tin.

+0

Cảm ơn. 'TASKLIST/FO CSV/NH' cho phép bạn xử lý thời gian CPU (kể từ khi bắt đầu) với độ chi tiết thứ hai theo cách có thể phân tích được, vì vậy có thể chạy hai lần với khoảng thời gian 100 giây để có ý tưởng thô về các quy trình sử dụng CPU dài nhất. –

2

Dường như bạn có thể làm một cái gì đó như:

wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1 

Chế độ Kernel tài khoản và thời gian có vẻ như được thể hiện bằng 1/10000000 của thứ hai.

Bạn sẽ có thể xử lý đầu ra đó để có được mức sử dụng CPU mỗi giây.

Ở đây sử dụng Cygwin của perl:

wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1 | 
    perl -lne ' 
    if (/\S/) { 
     my ($k,$c,$p,$u) = split /\s{2,}/; 
     $n{"$p\t$c"}=$k+$u; 
    } else { 
     my %c; 
     for my $k (keys %n) { 
     $c{$k} = $n{$k} - $o{$k} if defined $o{$k} 
     } 
     print "$_\t" . $c{$_}/1e5 for (sort {$c{$b}<=>$c{$a}} keys %c)[0..20]; 
     %o = %n; %n = undef; print "" 
    }' 

Đầu ra cái gì đó như:

0  System Idle Process  588.12377 
2196 sh.exe 107.00075 
248  svchost.exe  85.80055 
7140 explorer.exe 26.52017 
[...] 

mỗi giây. Lưu ý rằng nếu quá trình nhàn rỗi hệ thống chỉ hiển thị dưới 800% trên hệ thống không hoạt động, đó là do hệ thống của bạn có 8 lõi CPU (cũng ít nhất 8 luồng) khi đếm thời gian CPU của tất cả CPU.

Cũng lưu ý rằng EVERY:1 ở trên là một lời nói dối. wmic dường như không cung cấp cho đầu ra đó mỗi giây. Nhiều khả năng, nó ngủ khoảng 1 giây giữa mỗi báo cáo và không bù đắp cho thời gian cần để tính toán báo cáo. Vì vậy, trong thực tế, nó sẽ chạy mỗi 1 giây và một chút có nghĩa là những tỷ lệ phần trăm không phải là rất chính xác và hơi đánh giá quá cao.

Các vấn đề liên quan