有没有办法ps
从Cygwin?
例如,下面的命令都没有给出完整的wget
shell 行,只是/usr/bin/wget
:
$ ps -ef | grep wget
Administ 9844 7780 pty1 13:22:57 /usr/bin/wget
Administ 8036 12648 pty0 13:18:15 /usr/bin/wget
Administ 4832 11828 pty2 13:23:42 /usr/bin/wget
$ ps awx | grep wget
9844 7780 9844 10264 pty1 197108 13:22:57 /usr/bin/wget
8036 12648 8036 10060 pty0 197108 13:18:15 /usr/bin/wget
4832 11828 4832 10780 pty2 197108 13:23:42 /usr/bin/wget
$ ps -p 9844 | cat
PID PPID PGID WINPID TTY UID STIME COMMAND
9844 7780 9844 10264 pty1 197108 13:22:57 /usr/bin/wget
答案1
正如您从 cygwin 手册中看到的,ps
命令行未被报告。
process_PID
但是它在 /proc/ /cmdline下可用
答案2
这将打印所有 Cygwin 进程及其命令行,但是没有空格:
grep -a "" /proc/*/cmdline
-a 告诉 grep 显示二进制文件的内容(cmdline 是二进制的,而不是文本)
“” 告诉匹配所有内容。您可以将其替换为您感兴趣的进程的名称
$ grep -a "" /proc/*/cmdline /proc/10236/cmdline:/usr/bin/mintty-i/Cygwin-Terminal.ico- /proc/11340/cmdline:-bash /proc/11672/cmdline:[email protected]
...
如果您想保留命令行中的空格,请执行以下操作:
grep -a "" /proc/*/cmdline | xargs -0
答案3
cygwin、MSYS 和 MSYS2ps
受到严重阻碍。因此,我使用了其他几个别名/函数来提供帮助。对于命令行,我专门使用了名为 cmdl 的 shell 函数:
cmdl ()
{
if [ $# -eq 0 ]; then
cat /proc/$$/cmdline | tr '\0' ' '
else
while [ $# -gt 0 ]; do
cat /proc/$1/cmdline | tr '\0' ' '
echo
shift
done
fi
echo
}
用于cmdl
返回正在运行的进程的命令行,或cmdl <pid>...
打印列出的进程 ID(1 个或多个)的命令行。