代码之家  ›  专栏  ›  技术社区  ›  Elias Bachaalany

shell命令查找进程ID并附加到它?

  •  3
  • Elias Bachaalany  · 技术社区  · 15 年前

    我想使用“ddd”附加到正在运行的进程,我手动执行的操作是:

    # ps -ax | grep PROCESS_NAME
    

    然后我得到一个列表和PID,然后我键入:

    # ddd PROCESS_NAME THE_PID
    

    是否有一种直接键入一个命令的方法?

    备注:当我打字时 ps -ax | grep PROCESS_NAME ,grep将匹配进程和 grep 命令行本身。

    6 回复  |  直到 13 年前
        1
  •  3
  •   paxdiablo    15 年前

    有一种简单的方法可以摆脱grep过程:

    ps -ax | grep PROCESS_NAME | grep -v ' grep '
    

    (只要您尝试查找的进程不包含字符串 " grep " )

    所以类似这样的东西应该在脚本中工作(同样,假设只有一个副本在运行):

    pid=$(ps -ax | grep $1 | grep -v ' grep ' | awk '{print $1}')
    ddd $1 ${pid}
    

    如果你调用脚本 dddproc ,您可以通过以下方式调用它:

    dddproc myprogramname
    

    尽管我会添加一些健全性检查,例如检测是否有零个或多个进程从返回 ps 确保用户提供一个论点。

        2
  •  1
  •   Paul R    15 年前

    作为单独的命令:

    % PID=`ps -ax | grep ${PROCESS_NAME} | grep -v grep | cut -d ' ' -f 1-2`
    % ddd ${PROCESS_NAME} ${PID}
    

    在一行中:

    % PID=`ps -ax | grep ${PROCESS_NAME} | grep -v grep | cut -d ' ' -f 1-2` && ddd ${PROCESS_NAME} ${PID}
    
        3
  •  0
  •   Casual Coder    15 年前
    ddd <process_name> `pgrep <process_name>`
    
        4
  •  0
  •   anish    15 年前

    可以使用pggrep查找进程

        5
  •  0
  •   Randy Proctor    15 年前

    可以使用awk同时筛选和获取所需的列。“退出”将ps结果限制为第一次命中。

    function ddd_grep() {
      ddd $(ps -ax | awk -v p="$1" '$4 == p { print $1; exit 0; }');
    }
    
    ddd_grep PROCESS_NAME
    

    您可能需要调整PS输出的列。你也可以改变 == ~ 用于正则表达式匹配。

        6
  •  0
  •   Fahim Parkar    13 年前

    这样做-

    ddd PROCESS_NAME \`ps -ax | grep PROCESS_NAME | grep -v grep | awk '{print $1}'\`