在SunOS上,有一个pargs命令用于打印传递给正在运行的进程的命令行参数。

在其他Unix环境中是否有类似的命令?


当前回答

你可以简单地使用:

ps -o args= -f -p ProcessPid

其他回答

Linux中用空格打印/proc/PID/cmdline的另一个变体是:

cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo

这样,cat将NULL字符打印为^@,然后使用sed将它们替换为空格;Echo输出换行符。

在Linux终端上尝试ps -n。这将显示:

1.所有正在运行的进程,它们的命令行和pid

程序启动进程。

之后,您将知道该终止哪个进程

在Linux上

cat /proc/<pid>/cmdline

输出进程的命令行<pid>(命令包括参数)每条记录以NUL字符结束。

Bash Shell示例:

$ mapfile -d '' args < /proc/$$/cmdline
$ echo "#${#args[@]}:" "${args[@]}"
#1: /bin/bash
$ echo $BASH_VERSION
5.0.17(1)-release

除了以上所有转换文本的方法外,如果你只是使用'strings',默认情况下它会使输出在单独的行上。附加的好处是,它也可以防止任何字符,可能扰乱你的终端出现。

两个输出在一个命令:

字符串/proc//cmdline /proc// about

真正的问题是……是否有一种方法可以查看Linux中被修改的进程的真实命令行,以便cmdline包含修改后的文本,而不是实际运行的命令。

有以下几种选择:

ps -fp <pid>
cat /proc/<pid>/cmdline | sed -e "s/\x00/ /g"; echo

Linux上的/proc/<pid>中有更多的信息,看看就知道了。

在其他unix上,情况可能有所不同。ps命令可以在任何地方工作,/proc是特定于操作系统的东西。例如,在AIX上,/proc中没有cmdline。