มีวิธีแสดงกระบวนการ windows ใน Cygwin อย่างต่อเนื่อง


13

ฉันต้องการตรวจสอบกระบวนการจาก cygwin shell โดยใช้ top หรือ variant เหตุผลนี้เป็นรายงานเรียลไทม์และการปรับปรุงอย่างต่อเนื่อง อย่างไรก็ตามภายใต้ cygwin ด้านบนจะไม่รายงานเกี่ยวกับกระบวนการ windows

ฟอรั่ม Teh ฉันได้รับการแนะนำให้ใช้ps -Wเป็นทางเลือก แต่นี่มีข้อเสียเปรียบที่ไม่ให้ข้อมูลเรียลไทม์กับฉันอีกต่อไป แต่เป็นเพียงสแนปช็อตคงที่ทุกครั้งที่ฉันพิมพ์คำสั่ง

มีวิธีใดบ้างที่จะtopไปทำงานใน cygwin เพื่อแสดงกระบวนการทั้งหมดของฉันและไม่ใช่แค่กระบวนการ cygwins?


1
มีเหตุผลหรือไม่ที่ต้องมีเฉพาะใน Cygwin? หากคุณต้องการสิ่งที่แสดงรายการข้อมูลโดยละเอียดเกี่ยวกับการรันกระบวนการ windows ในรูปแบบตาราง (เช่นtop) ลองProcess Explorer
Darth Android

คำตอบ:


12

จาก bash shell คุณสามารถตรวจสอบกระบวนการ windows ทั้งหมดด้วยบรรทัดคำสั่งนี้:

watch "ps -W" # pipe to grep for filtering

หากต้องการดูกระบวนการ java ทั้งหมดตัวอย่างเช่น:

watch "ps -W | grep java"

โปรดทราบว่า "ps -W" แสดงรายการกระบวนการ cygwin และ non-cygwin


ไม่ว่าจะเป็นps -Wหรือps --windowsทำงานดูps --help
ติโม

2

คุณต้องติดตั้งไลบรารี procps สำหรับ cygwin ซึ่งรวมถึงโปรแกรมอันดับต้น ๆ อย่างไรก็ตามจะแสดงรายการกระบวนการที่ทำงานใน cygwin เท่านั้น หากคุณต้องการที่จะเห็นกระบวนการทั้งหมดที่ทำงานบน windows ให้อ้างอิงคำตอบนี้: /programming/3503681/cygwin-top-command-see-processes-for-all-users


1

ดูเหมือนว่าคุณสามารถทำสิ่งที่ชอบ:

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

ผู้ใช้และโหมดเคอร์เนลเวลาดูเหมือนจะแสดงใน 1 / 10,000,000 ของวินาที

คุณควรจะสามารถโพสต์โปรเซสนั้นเพื่อรับการใช้งาน CPU ต่อวินาที

ที่นี่โดยใช้ cygwin's 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 ""
    }'

เอาต์พุตคล้าย:

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

ทุกวินาที.

โปรดทราบว่าหากกระบวนการ Idle ของระบบแสดงน้อยกว่า 800% บนระบบที่ไม่ได้ทำงานนั่นเป็นเพราะระบบของคุณมี 8 คอร์ CPU (อย่างน้อย 8 เธรด) ซึ่งนับเวลา CPU ของ CPU ทั้งหมด

นอกจากนี้โปรดทราบว่าEVERY:1ข้างต้นเป็นเรื่องโกหก wmicดูเหมือนจะไม่ให้ผลลัพธ์นั้นทุกวินาที มีโอกาสมากขึ้นที่จะนอนประมาณ 1 วินาทีระหว่างแต่ละรายงานและไม่ชดเชยเวลาที่ใช้ในการคำนวณรายงาน ดังนั้นในทางปฏิบัติมันจะทำงานทุก 1 วินาทีและเล็กน้อยซึ่งหมายความว่าเปอร์เซ็นต์เหล่านั้นไม่แม่นยำมากและประเมินค่าสูงไปเล็กน้อย

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