在 cygwin 上使用 ps 的完整命令文本?

在 cygwin 上使用 ps 的完整命令文本?

有没有办法psCygwin?

例如,下面的命令都没有给出完整的wgetshell 行,只是/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 个或多个)的命令行。

相关内容