【问题标题】:Using awk to capture first line of a multiline output?使用 awk 捕获多行输出的第一行?
【发布时间】:2011-06-10 22:00:54
【问题描述】:

我有这个输出,它是运行匹配 fcgi 的 grep 的所有进程的 PID:

# ps ax | grep fcgi | cut -f1 -d' '
21065
21066
21067
21068
21069
21070
24801

我想删除第一个数字(即 21065),以便将其传递给 kill 函数以杀死父进程(父进程作为第一个 PID 返回)。

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: bash scripting sed awk system-administration


    【解决方案1】:

    如果可以避免的话,不要使用ps ax | grep... 杀死进程。见here

    改为使用pidof

    【讨论】:

    • 谢谢,弗雷德里克。我会检查一下。
    • 最终强制生成源创建 PID 文件。现在,我 cat/kill pidfile 中的内容。
    【解决方案2】:

    用途:

    获取pid号

    PARENT_PID=`ps ax | grep fcgi | cut -f1 -d' ' | head -1`
    

    直接杀死:

    kill `ps ax | grep fcgi | cut -f1 -d' ' | head -1`
    

    【讨论】:

      【解决方案3】:

      运行ps、grep、cut、head 和kill 自己无需跳过all the hoops。这就是pkill 的用途。

      pkill fcgi
      

      另请参阅pgrep 以供将来参考。

      【讨论】:

      • @ripat: killall 实际上有很大问题,只有在给定系统(例如 OSX)上没有 pkill 时才应该使用。在某些系统上,它实际上会杀死所有系统,而在其他系统上,它的匹配工作很差,而且据我所知,没有任何情况下它比 pkill 更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2014-05-18
      • 1970-01-01
      相关资源
      最近更新 更多