有没有办法,我可以通过用于调用它的shell脚本找到bash脚本的进程名称?或者我可以将bash脚本的进程名称设置为
之类的内容-myprocess
(我已经研究过argv [0],但我不清楚)
所以当我使用
时ps -ef | grep -c '[M]yprocess'
我只获得myprocess的所有实例?
答案 0 :(得分:0)
pgrep -lvx ProcessName
可能会做这项工作。你能检查一下吗?
答案 1 :(得分:0)
要获取正在运行的当前脚本的命令名,请使用:
ps -q $$ -o comm=
要获取与当前脚本同名的所有正在运行的脚本的进程信息,请使用:
ps -C "$(ps -q $$ -o comm=)"
要查找当前正在运行且与当前脚本同名的所有脚本的进程ID,请使用:
pgrep "$(ps -q $$ -o comm=)"
$$
是正在运行的脚本的进程ID。
选项-q $$
告诉ps
仅报告进程ID $$
。
选项-o comm=
告诉ps
省略标题并跳过通常的输出,而只打印命令名称。
答案 2 :(得分:0)
可以从$PPID
和bash
上的ksh
获取父进程ID。我们可以将ps
中的字段读入数组。
对于bash
,您可以试试这个。 ps
的问题在于许多选项都是非标准的,因此我将其保持为通用:
#!/bin/bash
while read -a fields
do
if [[ ${fields[0]} == $PPID ]]
then
echo "Shell: ${fields[3]}"
echo "Command: ${fields[4]}"
fi
done < <(ps -p $PPID)
您已标记bash
和ksh
,但它们具有不同的语法规则。要读入数组bash
使用-a
但ksh
使用-A
,那么对于korn shell,您需要更改read
行(以及{{} 1}}行):
#!