[英]Find out the shell which was used to run the process in linux?
最近,我陷入了一种情况,我需要找出进程列表(或使用pid
的单个进程)的shell
名称。 有没有一种方法可以找到它(最好使用ps
和grep
命令)。
由于您知道进程是从Shell启动的,因此您只需查找父进程的命令名称,即可使用ps
获得其进程ID,例如,使用OUTPUT FORMAT CONTROL选项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)。 请参见循环构造 。
构造${list[*]}
扩展到list
所有元素; 在bash
如果list
是数组变量(例如,由list=(1234 5678)
) ,并且 list
是具有空格分隔元素的简单变量(例如,由list="1234 5678"
),则此方法有效。 请参见Shell参数扩展和数组 。
ps p$pid hoppid
输出,例如1234:
没有换行符,因此以下输出直接出现在:
后面。 请参阅Bash内置命令 。
ps p`…` hocomm
进程选择选项p
选择要为其显示信息的进程,在本例中$pid
。
输出修饰符h
禁止打印列标题,例如PPID
。
输出格式控制选项o
用于选择ps
提供的信息,在本例中为ppid
,即父进程ID。
ps p`…` hocomm
先前命令的输出(即父进程ID)替换了反引号命令,因此我们获得了与上述命令非常相似的ps
命令,这次选择了父命令,并通过comm
选择了要输出的命令名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.