ฉันกำลังมองหาเครื่องมือหรือวิธีการเพื่อค้นหาว่าพารามิเตอร์บรรทัดคำสั่งใดถูกส่งผ่านไปยังโปรแกรมตัวอย่างเช่นเมื่อมีการเรียกใช้โดยโปรแกรมอื่น
ฉันกำลังมองหาเครื่องมือหรือวิธีการเพื่อค้นหาว่าพารามิเตอร์บรรทัดคำสั่งใดถูกส่งผ่านไปยังโปรแกรมตัวอย่างเช่นเมื่อมีการเรียกใช้โดยโปรแกรมอื่น
คำตอบ:
คุณสามารถทำได้โดยใช้Process Explorer
เพียงเลื่อนเมาส์ไปเหนือกระบวนการเพื่อดูอาร์กิวเมนต์บรรทัดคำสั่งที่ใช้เริ่ม:
หรือคุณสามารถเปิดคุณสมบัติของกระบวนการและตรวจสอบบรรทัดคำสั่งได้ที่นั่น:
คุณสามารถทำได้โดยไม่มี Process Explorer เช่นกันโดยใช้บริการ WMI ของ Windows เรียกใช้สิ่งต่อไปนี้จากพรอมต์คำสั่ง:
WMIC path win32_process get Caption,Processid,Commandline
หากคุณต้องการดัมพ์เอาต์พุตไปยังไฟล์ (ทำให้อ่านง่ายขึ้น) ให้ใช้สวิตช์ / OUTPUT:
WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
หนึ่งยังสามารถบรรลุว่าด้วยการใช้ตัวจัดการงาน
เปิดตัวจัดการงาน (โดย CTRL-SHIFT-ESC, CTRL-ALT-DELETE หรือวิธีอื่นใด)
สำหรับ Windows 7 (และอาจเป็น Windows XP):
สำหรับ Windows 8:
คอลัมน์ของบรรทัดคำสั่งของจะถูกเพิ่มไปยังคอลัมน์ที่ปรากฏในปัจจุบัน
PowerShell เพื่อช่วยเหลือ
หา:
Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'}
และฆ่าเป็นโบนัส:
Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }
คุณสามารถเรียกใช้จาก powershell โดยตรงหรือจาก ps1 หากคุณมีการตั้งค่าระบบของคุณ ฉันแสดงรายละเอียดการตั้งค่าสคริปต์ที่ไม่ จำกัด ในการฆ่าซอมบี้ด้วย powershellรวมถึงเทคนิคอื่น ๆ ของ powershell ...
คำตอบก่อนหน้านี้ยอดเยี่ยมในกรณีที่กระบวนการกำลังทำงานอยู่และจะไม่ยุติในไม่ช้า แต่ถ้าคุณต้องการ (ที่ผมได้) การทำเช่นนี้อาจจะมี processses เริ่มต้นขึ้นหลายครั้งและ / หรือได้อย่างรวดเร็วยุติหรือบางทีอาจจะเข้าสู่ระบบที่ปรากฏในระยะเวลานานของเวลามีวิธีการนี้โดยใช้กระบวนการตรวจสอบ
โดยทั่วไปจะบันทึกเหตุการณ์ต่าง ๆ ในระบบในกรณีนี้เราสามารถกรองเหตุการณ์ "เริ่มกระบวนการ" และชื่อของกระบวนการที่เราต้องการตรวจสอบดังที่แสดงด้านล่าง:
จากนั้นเพียงแค่ให้กระบวนการตรวจสอบกระบวนการทำงานและทำสิ่งที่คุณทำเพื่อให้กระบวนการที่คุณต้องการเข้าสู่ระบบทำงาน คุณสามารถเห็นได้ในคอลัมน์ "รายละเอียด" หรือคอลัมน์ "บรรทัดคำสั่ง" (ขึ้นอยู่กับวิธีที่คุณกำหนดค่าเหล่านั้น) อาร์กิวเมนต์บรรทัดคำสั่ง ตัวอย่างเช่น:
แน่นอนด้วยวิธีนี้คุณสามารถดึงข้อมูลที่เกี่ยวข้องมากขึ้นเช่นไดเรกทอรีทำงานอะไรตัวแปรสภาพแวดล้อมที่ได้รับการส่งผ่านในกระบวนการ ฯลฯ ... นอกจากนี้ยังเป็นเรื่องง่ายที่จะส่งออกผลลัพธ์ไปยังไฟล์
เมื่อใช้CygWinถ้าฉันเริ่มกระบวนการPythonนี่คือตัวอย่างของบรรทัดคำสั่ง:
c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py
แต่Process Explorerจะเห็น exe หลักเท่านั้น:
(โปรดทราบว่า"เส้นทาง: [ข้อผิดพลาดการเปิดข้อความกระบวนการ]" (ดู EDIT-1)) ผลลัพธ์เดียวกันสำหรับtasklist
:
C:\>tasklist | find "python" /i
python2.7.exe 5740 Console 1 15.312 KB
ดังนั้นเคล็ดลับเดียวที่ฉันรู้จนถึงตอนนี้คือการค้นพบมันผ่านCygWin Bash shell pgrep
:
Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py
มันมีประโยชน์ที่จะรู้สิ่งนี้ตราบใดที่ CygWin ร่วมมือกันโดยไม่มีปัญหาใน Windows และคุณสามารถใช้มันเพื่อรันโปรแกรม POSIX และ Python จำนวนมาก
แก้ไข: ใน Windows คุณไม่จำเป็นต้องมีสิทธิ์ผู้ดูแลระบบสำหรับรายการงาน ใน Cygwin คุณจะต้องให้พวกเขาสามารถดูกระบวนการของผู้ดูแลระบบ (สิ่งที่ดูเหมือนตรรกะมากขึ้นกับฉัน: เต็มบรรทัดคำสั่งอาจมีพารามิเตอร์บางอย่างเช่นรหัสผ่านภายใน) ดังนั้นเราจึงต้องเรียกใช้Cygwinทุบตีในการยกระดับ โหมดผู้ดูแลระบบ
EDIT-1: ปัญหานี้จะไม่เกิดขึ้นหากคุณเรียกใช้ Process Explorer ในฐานะผู้ดูแลระบบ ขอบคุณสำหรับการชี้ @Pacerier
[Error opening process message]
ไปที่run
หรือข้ามไปstart
และค้นหา:
tasklist -m
tasklist -svc
/m
แสดงโมดูลที่โหลด (DLLs ฯลฯ ) และ/svc
แสดงบริการที่โฮสต์ในแต่ละกระบวนการ