如何通过调用它的shell脚本找到进程名称?

时间:2018-02-19 07:36:15

标签: bash shell unix ksh

有没有办法,我可以通过用于调用它的shell脚本找到bash脚本的进程名称?或者我可以将bash脚本的进程名称设置为

之类的内容

-myprocess

(我已经研究过argv [0],但我不清楚)

所以当我使用

ps -ef | grep -c '[M]yprocess'

我只获得myprocess的所有实例?

3 个答案:

答案 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)

可以从$PPIDbash上的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)

您已标记bashksh,但它们具有不同的语法规则。要读入数组bash使用-aksh使用-A,那么对于korn shell,您需要更改read行(以及{{} 1}}行):

#!