มีคำสั่ง windows ที่ส่งคืนรายการของกระบวนการ 64 และ 32 หรือไม่?


5

ฉันกำลังมองหาวิธีการแก้ปัญหาเพื่อค้นหากระบวนการที่กำลังทำงานมากกว่า 64 และที่ใดใน 32 บิตในระบบ Windows Seven 64 ของฉันมีคำสั่ง windows shell ง่าย ๆ ที่มีให้ทำ

คำตอบ:


10

หลังจากความคิดบางอย่างฉันก็รู้ว่าวิธีการของ WMIC นั้นเป็นเรื่องที่แปลกมาก วิธีที่ดีกว่าในการทำเช่นนี้คือใช้สคริปต์ PowerShell ที่มีลักษณะดังนี้:

[System.Diagnostics.Process[]] $processes64bit = @()
[System.Diagnostics.Process[]] $processes32bit = @()

foreach($process in get-process) {
    $modules = $process.modules
    foreach($module in $modules) {
        $file = [System.IO.Path]::GetFileName($module.FileName).ToLower()
        if($file -eq "wow64.dll") {
            $processes32bit += $process
            break
        }
    }

    if(!($processes32bit -contains $process)) {
        $processes64bit += $process
    }
}

write-host "32-bit Processes:"
$processes32bit | sort-object Name | format-table Name, Id -auto

write-host ""
write-host "64-bit Processes:"
$processes64bit | sort-object Name | format-table Name, Id -auto

หากคุณคัดลอกสิ่งนั้นลงในสคริปต์ PowerShell เรียกว่า process-width.ps1 และเรียกใช้ใน PowerShell จะแสดงรายการกระบวนการ 32- บิตทั้งหมดตามด้วยกระบวนการ 64 บิต

ทำได้โดยการตรวจสอบว่ากระบวนการมีการโหลด wow64.dll เป็นโมดูลในพื้นที่ของกระบวนการหรือไม่ wow64.dll เป็นเลเยอร์การจำลองแบบ Windows 32 บิตสำหรับระบบปฏิบัติการ 64 บิต มันจะถูกโหลดโดยกระบวนการ 32 บิตเท่านั้นดังนั้นการตรวจสอบว่าเป็นวิธีที่แน่นอนที่จะทราบว่ากระบวนการเป็น 32 บิตหรือไม่

สิ่งนี้จะทำงานได้ดีขึ้นเป็นวิธีแก้ปัญหาระยะยาว


มันทำงานด้วยเช่นกัน
Diogo

1
วิธีที่กระชับยิ่งขึ้นในการรับกระบวนการ 32 บิตทั้งหมด: Get-Process | where { ($_.Modules | where { $_.FileName -match "\\wow64.dll$" }) }
Phil

4
wmic process get

จะทำรายการกระบวนการทั้งหมดในระบบ คุณสามารถส่งพารามิเตอร์เพื่อรับคุณสมบัติ WMI Win32_Process คุณสามารถค้นหารายการที่นี่:

http://msdn.microsoft.com/en-us/library/aa394372(v=vs.85).aspx

หนึ่งในนั้นอาจแสดงว่ากระบวนการเป็น 64 หรือ 32 บิต

e: ไม่มีคุณสมบัติโดยตรง แต่คุณสามารถทำได้:

wmic process get Name, MaximumWorkingSetSize

ถ้าจำนวนที่ส่งคืนโดย MaximumWorkingSetSize มากกว่า 3096 แสดงว่าเป็นกระบวนการ 64 บิต บนเครื่องของฉันกระบวนการ 64 บิตจะมี MaximumWorkingSetSize เป็น 32768 (aka 32gb) ในขณะที่กระบวนการ 32 บิตจะมี MaximumWorkingSetSize เป็น 1380 ซึ่งเป็นขนาดที่ปรับของไฟล์ swap ไม่ว่าด้วยวิธีใดก็ตามการตรวจสอบง่าย ๆ คือ:

MaximumWorkingSetSize > 3096 == 64-bit

hmmm บางอย่างไม่ทำงานฉันใช้กระบวนการ wmic get & gt; file.txt และพบรายการทั้งหมดในนั้น แต่ในระบบ 64 ของฉันมันบอกว่าฉันมีเพียง 32 กระบวนการทำงาน
Diogo

คุณเรียกใช้ "กระบวนการ wmic รับชื่อ MaximumWorkingSetSize & gt; file.txt" หรือไม่ หากหนึ่งในนั้นมี MaxiumumWorkingSetSize & gt; 3096 เป็นกระบวนการ 64 บิต ตรวจสอบให้แน่ใจว่าคุณใช้เป็นบัญชีผู้ดูแลระบบเพื่อให้คุณเห็นกระบวนการทั้งหมดไม่ใช่แค่ของคุณ
Matt Holmes

แน่นอนว่าฉันทำตอนนี้และใช้งานได้ แต่ฉันยังได้รับผลลัพธ์ที่แปลกประหลาดมีเพียง dwm.exe และ ccSvcHst.exe ได้คะแนนมากกว่า 1,380 คะแนนฉันคิดว่ากระบวนการทำงานส่วนใหญ่คือ 64 บิต
Diogo

อย่างไรก็ตามมันช่วยฉันได้จริงๆขอบคุณมาก Matt
Diogo

เคล็ดลับดี ๆ
Jeff F.

3

หากคุณติดตั้ง Visual Studio จากนั้นคุณสามารถใช้ dumpbin.exe จากพรอมต์คำสั่ง Visual Studio เพื่อถ่ายโอนข้อมูลส่วนหัวที่ปฏิบัติการได้:

dumpbin.exe /HEADERS file.exe

ส่วนหัวของเครื่องจะเป็น 14C สำหรับไบนารี x86 และ 8664 สำหรับ x64:

x86:

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
         14C machine (x86)

x64

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
        8664 machine (x64)

2

ง่ายมากเพียงแค่ยิง Task Manager กระบวนการที่มี * 32 คือแอป 32 บิต

enter image description here


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