Linux 计数同一程序的副本-存储在变量中时结果太高

Linux 计数同一程序的副本-存储在变量中时结果太高,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我试图弄明白为什么我下面代码中的with proc_count(RHEL7.6bash)没有设置为1?它总是设置为2。我确信没有其他名为temp的作业正在运行。另外,我只是在使用$()执行命令时才看到这个错误的结果。当第一个命令准确地将1打印为输出,但proc_count设置为2时 我对它进行了10次不同的测试,但没有发现哪里出了问题。感谢您的任何意见。也许我错过了一些非常简单的事情 顺便说一句,这段代码在AIX(7.2Bash)上为$proc_count生成1的输出 附言:最后一个grep真的

我试图弄明白为什么我下面代码中的with proc_count(RHEL7.6bash)没有设置为1?它总是设置为2。我确信没有其他名为temp的作业正在运行。另外,我只是在使用$()执行命令时才看到这个错误的结果。当第一个命令准确地将1打印为输出,但proc_count设置为2时

我对它进行了10次不同的测试,但没有发现哪里出了问题。感谢您的任何意见。也许我错过了一些非常简单的事情

顺便说一句,这段代码在AIX(7.2Bash)上为$proc_count生成1的输出

附言:最后一个grep真的不需要,我加上它是为了解决这个问题

猫的体温

    ```#!/bin/sh

    jobname=$(basename $0 .sh)
    echo $jobname

    ps -ef|grep -v grep|grep -v tail|grep "${jobname}"|grep -v grep|wc -l

    proc_count=$(ps -ef|grep -v grep|grep -v tail|grep "${jobname}"|grep -v grep|wc -l)
    echo $proc_count```
美元/临时上海

临时工

一,

二,

谢谢!
Raghu

一般来说,首先计算流程表条目是个坏主意。如果要防止同一作业的重复实例运行,这就是--
flock
和类似工具的建议锁定。如果出于某种原因,您仍然想这样做,请使用一个专门为正确处理拐角案例而构建的工具,如
pgrep
。总之,您看到的是过程本身。请记住,命令替换和管道都在当前进程的fork()-ed off副本中运行,从而获得自己的进程表条目。您可以从管道中grep出
grep
,但不能grep出分叉副本,因为它与其父副本相同。一般来说,首先计算流程表条目是个坏主意。如果要防止同一作业的重复实例运行,这就是--
flock
和类似工具的建议锁定。如果出于某种原因,您仍然想这样做,请使用一个专门为正确处理拐角案例而构建的工具,如
pgrep
。总之,您看到的是过程本身。请记住,命令替换和管道都在当前进程的fork()-ed off副本中运行,从而获得自己的进程表条目。您可以从管道中grep出
grep
,但不能grep出分叉副本,因为它与其父副本相同。