2013-10-23 25 views
6

jeśli używam "ps -efW", jest to lista procesów systemu Windows, ale nie z argumentami wiersza poleceń.Jak wyświetlić proces z argumentami w oknach przy użyciu jakichkolwiek narzędzi cygwin

Natknąłem się na 3 linki, gdzie powiedziano, aby używać "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

ale nie znaleźliśmy wyjątkiem procps w cygwin pakietu 32 bitowym.

nawet po zainstalowaniu procps, nie wiem jak używać. przeczytaj stronę man. ale nie dostałem żadnej wskazówki.

Czy ktoś może pomóc?

na przykład

poleceniem wmic widzę cały proces z argumentów.

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 

ale za pomocą polecenia cygwin ps.

C:\Users\test1>ps -efW |grep cmd 
     0 2904  0 ?   Oct 17 C:\Windows\System32\cmd.exe 
     0 3968  0 ?   Oct 18 C:\Windows\System32\cmd.exe 
     0 1864  0 ?   Oct 18 C:\Windows\System32\cmd.exe 
     0 3200  0 ?  08:39:43 C:\Windows\System32\cmd.exe 

Odpowiedz

6

Jeśli potrzebujesz argumentów tylko dla procesów Cygwin można użyć

procps -wwFAH 

lub

pstree -a 

(pstree jest częścią pakietu Psmisc).

Jeśli potrzebujesz argumentów dla procesów Windows, możesz również użyć wmic (działa on w powłoce cygwin). Możesz też spróbować dodać numer process.c z win7util package, aby dołączyć pełną linię poleceń.

1

Wstęp: Ok ... To było naprawdę denerwujące. Po prostu nie było żadnego realistycznego sposobu, aby programowo pobrać te informacje do Cygwin. Za każdym razem, gdy zaczynałem od rozwiązania problemu, zajęło mi to ponad 20 minut, odrzucając ścieżkę/rozwiązanie i cofając ją. Korzystanie z WMI, Wmic, nawet wyciągając z rejestru, stał się śmieszny. Nic nie zapewniało niezawodności, a większość czasu nawet WMI nie zawierała linii CMD. Zawsze kończyło się budowanie analizatora dll/exe.

Następnie dzisiaj robiłem trochę pracy DLL, niezależnie od Cygwin, i wpisałem "listdlls". Początkowo myślałem, że jest to po prostu zwinięta funkcja lub alias, najprawdopodobniej Nirsoft's RegDLLView. Ale szybko uświadomił sobie, że prawdopodobnie Sysinternal to listdlls.exe, czyli linia poleceń!

Rozwiązanie:

  • look-up i przechowywać PID dla nazwa pliku wykonywalnego wyszukiwania wyrażenia
  • zapisywanie wyników z „listdlls.Exe”
  • pętli tablicy PID \
  • odnośników nazwę PID \
  • drukowania linii polecenia interpretowania nazwę procesu przed listdlls wyniki

do zgrubnego przykładu (zależności = 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 
} 

naprawdę myślę, to jest to, czego byliśmy po daj mi znać. Cheers

.
+0

Co to jest funkcja "__getexeccmd"? To nie jest funkcja bash. Jak ktoś powinien to wykorzystać? –

+0

Użyj go jednak, jak chcesz ... Możesz załadować go do swojego profilu bash, być może bardziej przyjazną nazwę ... Możesz łatwo przekształcić go w skrypt basha, wyrzucić go w "usr/bin" lub pseudonimie. – jonretting