代码之家  ›  专栏  ›  技术社区  ›  Juliosor

Grep和pGrep编制流程

  •  0
  • Juliosor  · 技术社区  · 7 年前

    我对bash一点也不熟悉,但我正在尝试制作一对脚本来检测

    1. 如果程序正在运行。
    2. 如果python/bash脚本正在运行。

    我的n1代码是:

    #!/bin/bash
    
    X=$( pidof $1 )
    
    if [ ${#X} -gt 0 ]
    then
        echo "$1 has already $X been started"
    else
        echo "$1 not started $X"
    fi
    

    它工作得很好,但不会检测到脚本,所以我做了n:2的更改:

    X=$( pgrep -f $1 )
    

    一开始n2似乎可以工作,但当我终止python脚本时,仍然得到:

    WebsocketServer has 5 length and it's already 11919 started
    

    如果我做了 ps -ax 这些进程的PID并不在任何地方都能看到。

    但如果我写信 ps -ax | grep websocket :

    11921 pts/4    S+     0:00 grep --color=auto websocket
    

    如果我启动python脚本。。。

    WebsocketServer has 11 length and it's already 11927 11935 started
    

    发生什么事了?我是不是用错了命令?

    编辑:忘了提那篇文章 pgrep -f WebsocketServer 在终端中不返回任何内容,就像它应该返回的那样。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    问题是脚本的参数与要搜索的脚本名相同,并且 pgrep -f 正在查找脚本。

    有一个技巧你可以试试:把名字分成两个参数。

    checkScriptAlive websocket Server
    

    然后在脚本中,执行以下操作:

    target="$1$2"
    x=$(pgrep -f "$target")
    
    推荐文章