找出在linux中用于运行进程的shell?

Find out the shell which was used to run the process in linux?

我最近陷入了一种情况,我需要找出进程列表的 shell 的名称(或者对于单个进程,使用 pid)。有没有办法找到它(最好使用 psgrep 命令)。

因为你知道进程是从shell开始的,你只需要找到parent进程的命令名,进程id可以使用[=15=获得],即。 G。使用输出格式控制选项 oppid.

for pid in ${list[*]}; do echo -n $pid:; ps p`ps p$pid hoppid` hocomm; done
细节
for pid in ${list[*]}; do …; done

命令list中的每个元素执行一次,变量pid依次设置为每个元素(进程ID)。参见 Looping Constructs

构造 ${list[*]} 扩展到 list 中的所有元素;在 bash 如果 list 是一个数组变量(由例如 list=(1234 5678) 设置) 以及 如果 list 是一个简单的具有 white-space-separated 元素的变量(由例如 list="1234 5678" 设置)。参见 Shell Parameter Expansion and Arrays

echo -n $pid:

输出e。 G。 1234: 没有换行符,因此下面的输出直接出现在 : 后面。参见 Bash Builtin Commands

ps p$pid hoppid

进程选择选项 p 选择要显示其信息的进程,在本例中 $pid
输出修饰符 h 禁止打印列 header,e。 G。 PPID.
输出格式控制选项 o 用于选择 ps 提供的信息,在本例中只是 ppid,parent 进程 ID。

ps p`…` hocomm

前一个命令的输出(即 parent 进程 ID)替换了反引号命令,因此我们得到一个与上述命令非常相似的 ps 命令,这次带有 parent 被选中,它的命令名称被选择用于输出 comm.

参见 Command Substitution and ps - report process status