Windows'ta PID verildiğinde - bunu yapan komut satırı talimatını nasıl bulabilirim?


26

Bir veritabanında, şu anda çalışan tüm işlemlerin ve bunları başlatan sql komutunun bir listesini alabilirim.

Windows kutusunda da benzer şeyler yapmak isterim.

İşlemlerin listesini alabilirim ama onları başlatan komut satırını alamam.

Sorum şu: Windows'ta PID veriliyorsa - onu çalıştıran komut satırı talimatını nasıl bulabilirim?

Varsayımlar:

  • Windows 7 ve eşdeğeri sunucular

Yanıtlar:


35

Powershell ve WMI.

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

Veya

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"

Bir işlem hakkındaki bu bilgilere erişmek için izniniz olması gerektiğini unutmayın. Bu nedenle, bilmek istediğiniz işlem ayrıcalıklı bir bağlamda çalışıyorsa, komutu yönetici olarak çalıştırmanız gerekebilir.


Yolunu keser buluyorum - bunun bir yolu var mı?
Hawkeye

1
@Hawkeye Komutun | FLsonuna eklemeyi deneyin . Bu benim için tüm komut satırını genişletiyor. Ayrıca oynamak isteyebilirsiniz| Select -ExpandProperty CommandLine
Ryan Ries

İlginç bir şekilde, bu bilgiyi yerel Get-Process cmdlet'inden alamazsınız.
Davidw

3
Get-process, bu özelliğe sahip olmayan system.diagnostics.process sınıfını kullanır. Get-process'in yardımında, proses nesnesini elde etmek için wmi kullanmanın bir örneği de var
Jim B

2
Başka bir sürecin komut satırını almak için resmi olarak desteklenen bir yol bulunmadığını belirtmekte fayda var . Komut satırı olabilecek bir dize almanın yolları olmasına rağmen , işletim sistemi tarafından garanti edilmez ve sonuç, bildiğiniz herkes için "tavuk tavuk tavuğu" olabilir.
Nick

21

Bu bilgilere erişmek için WMIC.EXE kullanarak WMI alt sistemini kullanabilirsiniz. 600 PID varsayarak:

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list

Ayrıca, adı veya işlemin diğer özelliklerini de arayabilirsiniz. Tüm özellikleri listelemek için bu komutu kullanın:

wmic.exe path Win32_Process get  /format:list

1
Bu kullanışlı; Bunu processyerine diğer ad ile biraz kısaltabilirsiniz path Win32_Process; örneğin, wmic.exe process get
mklement

15

Diğer cevaplar, komut satırlarının doğası gereği, size otomatik bir sistemde iyi hizmet edecek kesinlikle iyi seçeneklerdir (ve etiketinde gördüğün şeyin ne olduğunu görüyorum). Elbette, bazı insanlar bu tür bilgileri bir GUI ile keşfetmek isteyebilir, bu yüzden bu satırlar boyunca bir alternatif.

İşlem Gezgini, Microsoft tarafından tutulan bir Sysinternals aracıdır. Sürecin komut satırını, işlemin özellikleri iletişim kutusunda ve onu başlatan üst öğede görüntüleyebilir, ancak bu işlemin adı artık kullanılamayabilir. İşte işlem özellikleri iletişim kutusu:

süreç özellikleri iletişim kutusu

Bir sürecin ne zaman başlatıldığına ve hangi koşullar altında olduğuna dair daha ayrıntılı bir denetim izi istiyorsanız, Process Monitor adlı başka bir Sysinternals aracına dönebilirsiniz. Burada "İşlem başlatıldı" olaylarını filtreleyebilir, işlemin başlatıldığı ortamı öğrenebilir ve bu zaman zarfında başka hangi olayların gerçekleştiğini görebilirsiniz. Oldukça güçlü bir program. İşte etkinlik özellikleri iletişim kutusu:

etkinlik özellikleri iletişim kutusu


10
Veya Görev Yöneticisi'ndeki sütunları PID ve "Komut Satırı" nı gösterecek şekilde değiştirin. Ve bitti.
Ismael Miguel,

Görev Yöneticisi @IsmaelMiguel Komut Satırı sütun Process Explorer yaparsa kesiği, gerçekten uzun argüman dizeleri, bilmiyorum does
SD JG

@ JGinSD Hiç kesilmiş bir tartışma görmedim.
Ismael Miguel,

1
Sınır Komut Satırı sütun için yaklaşık 200 karakterdir gibi @IsmaelMiguel görünüyor
SD JG

1
Görev Yöneticisi'ndeki gerçek sınır 259 karakterdir. (Windows 10'da doğrulandı). Ancak Görev Yöneticisi'nin bir avantajı var: Yükselişsiz çalıştığında (yönetici olarak değil), diğer kullanıcıların / yükseltilmiş işlemlerin komut satırlarını gösterir. İşlem Gezgini ve İşlem İzleyicisi 259 karakterlik bir limite sahip olmasa da, v16.22'den itibaren, eğer o sütunun üzerine fare eklerseniz, sütun eklendiyse aşırı uzun komut satırları ile asılabilirlerCommand Line .
59'da

1

Tamamlamak için Ryan Ries' yararlı PowerShell cevabı bir ile aracılığıyla kısa bir alternatif -Filterparametresi de kullandığıGet-CimInstance yerine kaldırılmış-beri-v3 Get-WmiObjectcmdlet .

# Target a process by its PID (process ID) and report its command line, 
# using the PowerShell session's own PID as an example ($PID).
(Get-CimInstance Win32_Process -Filter "ProcessId=$PID").CommandLine

# Alternatively, target process(es) by name (may return multiple processes), 
# using Notepad.exe as an example.
# Select-Object is used to report both the PID and the command line.
Get-CimInstance Win32_Process -Filter "Name='Notepad.exe'" |
  Select-Object ProcessId, CommandLine

-FilterParametre esas sen geçmesine izin verir WHEREa maddesini WQL ile tam sorgu deyimi geçirmeden yerine deyimi -Query.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.