2013-10-23 71 views
6

如果我使用「ps -efW」,它列出了Windows進程但不包含命令行參數。如何使用任何cygwin實用程序在窗口中查看具有參數的進程

我遇到了3個鏈接,告訴他們使用「pstree」,「/ proc/PID/cmdline」,「procps」。

http://cygwin.com/ml/cygwin/2007-04/msg00813.html

http://cygwin.com/ml/cygwin/2007-04/msg00817.html

http://cygwin.com/ml/cygwin/2007-04/msg00821.html

,但我不發現除了在cygwin的32位包procps的。

即使安裝procps後,我不知道如何使用。閱讀手冊頁。但沒有得到任何線索。

有人可以幫忙嗎?

例如,

使用wmic命令我可以看到具有參數的完整進程。

C:\Users\test1>wmic process get ProcessID, Commandline /format:csv |grep cmd 
OSWIN7VC10-32B1,"C:\Windows\system32\cmd.exe" ,2904 
OSWIN7VC10-32B1,C:\Windows\system32\cmd.exe /c c:\ostore74\src\osci\scripts\buil 
d_test\nt\batch_conf\winnt_vc100_weekly.bat >C:\Users\test1\AppData\Local\Tem 
p\s1io.4 2>C:\Users\test1\AppData\Local\Temp\s1io.5,3968 
OSWIN7VC10-32B1,C:\Windows\system32\cmd.exe /c C:\apache-ant-1.7.1\bin\ant.bat - 
Djboss.home=C:\ostore74\tmp\javaee\jboss-4.2.3.GA -emacs -k -f C:\ostore74\src\j 
mtl\build.xml overnight >> \\ostorenas\odi\ostore_platform_logs\ostore\7.4 
.0\test1\winnt_vc100\2013-10-18-1720\unit_retail_jmtl.log 2>&1,1864 
OSWIN7VC10-32B1,"C:\Windows\system32\cmd.exe" ,604 
OSWIN7VC10-32B1,grep cmd,2064 

但使用cygwin ps命令。

​​

回答

6

如果需要參數僅供cygwin的過程中,你可以使用

procps -wwFAH 

pstree -a 

(pstree是包Psmisc做的一部分)。

如果你需要Windows進程的參數,你也可以使用wmic(它可以在cygwin shell中運行)。或者,您可以嘗試修補win7util packageprocess.c以包含完整的命令行。

1

前言:好的...所以這真的很煩人。似乎沒有任何可行的方式通過編程方式將這些信息提取到Cygwin中。任何時候我開始解決方案,花費超過20分鐘,解散路徑/解決方案並將其燒掉。使用WMI,Wmic,甚至從註冊表中拉出來,變得荒謬可笑。沒有什麼可以提供可靠的,大部分時間甚至WMI都沒有列出CMD線。總是最終建立一個DLL/EXE分析器。

然後今天我做了一些DLL工作,不管Cygwin如何,然後鍵入「listdlls」。起初,我認爲這只是一些滾動功能或別名,很可能是Nirsoft的RegDLLView。但很快就意識到它可能是Sysinternal的listdlls.exe,這是命令行!

解決方案:

  • 查找和存儲PID的可執行文件名搜索詞
  • 店「listdlls的結果。EXE」
  • 循環通過PID的陣列\
  • 查找PID進程名\
  • 打印針對listdlls的進程名稱匹配命令行導致

對於粗糙例如(依賴= listdlls.exe,grep的時,awk,ps的 「procps的」):

__getexecmd() { 
    [ -z "[email protected]" ] && return 1 
    local term="[email protected]" 
    hash listdlls || return 1 
    local dlls="$(listdlls)" 
    for i in $(ps -Wa | awk '/'"$term"'/ {print $1}'); do 
     echo "$dlls" | grep -A1 "$i" | awk '/Command\ line\:/{gsub(/Command\ line\:\ /,"");print $0}' 
    done 
    return 0 
} 

我真的認爲這是你所追求的 讓我知道乾杯

+0

這是什麼「__getexeccmd」功能?這不是一個bash函數。有人應該如何使用它? –

+0

不管你希望如何使用它......你可以將它加載到你的bash配置文件中,也許是一個友好的名字....你可以很容易地將它轉換成bash腳本,把它放在「usr/bin」或別名中。 – jonretting

相關問題