Reputation: 1266
If I use ps -efW
, it is listing the Windows processes, but not with command-line arguments.
I came across three links where I was told to use pstree
, /proc/PID/cmdline
, and 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
However, I dont find any except procps
in Cygwin 32-bit packages.
Even after I installed procps
, I don't know how to use it. I read the man page, but didn't get a clue.
Can someone please help?
For example, using the wmic
command, I can see the complete process with arguments.
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
However, using the Cygwin ps
command.
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
Upvotes: 14
Views: 9512
Reputation: 105
"pgrep -a" will also do the trick. For example:
$ emacs-w32.exe somefile.txt &
$ pgrep -a emacs
21564 emacs-w32 somefile.txt
$ pgrep -a . #to see all processes
Upvotes: 5
Reputation: 2583
If you need arguments only for cygwin processes, you can use
procps -wwFAH
or
pstree -a
(pstree
is a part of the psmisc package).
If you need arguments for Windows processes, you can use wmic
as well. It works in the Cygwin shell. Alternatively, you can try to patch process.c
of the win7util package to include a full command-line.
Upvotes: 16
Reputation: 430
Preface: Ok... So this was a really annoying one. There just didn't seem to be any viable way to programmatically grab this information into Cygwin. Anytime I started on a solution, it took more than 20min, dismissing the path/solution and back-burner it. Using WMI, Wmic, even pulling from registry, became ridiculous. Nothing provided dependable out, and most of the time even WMI didn't list the CMD line. Always ended up building out a dll/exe analyzer.
Then today I was doing some DLL work, irrespective of Cygwin, and typed "listdlls". At first I thought it was just some rolled function or alias, most likely Nirsoft's RegDLLView. But quickly realized its probably Sysinternal's listdlls.exe, which is command line!
Solution:
For rough example (dependencies = listdlls.exe, grep, awk, ps "procps"):
__getexecmd () {
[ -z "$@" ] && return 1
local term="$@"
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
}
I really think this is what you were after. Let me know. Cheers
Upvotes: 3