Bash

該命令中的管道最終如何實現殺死程序?

  • December 25, 2013

我在用於終止程序的 bash 腳本中看到了以下行(在這種情況下,從 command 開始loadgen):

ps xww | grep -i "loadgen" | grep "PATTERNMATCH_FACT.xml" | cut -c1-5 | xargs -i kill {} 2>/dev/null

我想了解在上面命令中的兩個 grep 之後進行管道的原因。

命令的啟動方式loadgen如下。它是啟動腳本的一部分。

./loadgen -XMLFile ${DEMODIR}/bam-103-pattern-match/data/PATTERNMATCH_FACT.xml -duration 0 -frequency 2 

ps xww給出以下輸出

...
   1 ?        Ss     0:00 init [2]
1804 pts/0    Ss     0:00 -bash
...

在兩者之後,grep它通過管道將輸出傳輸到cut. 此命令從輸出中刪除字元 1-5。在上面的輸出中,它應該是 PID:

   1
1804

這是通過管道傳輸到xargs. Xargs 建構的命令如下所示:

kill 1
kill 1804

並執行它們。2>/dev/null表示所有錯誤資訊都發送到偽設備/dev/null

因此,您的命令會殺死命令grep之外的每個程序ps

或查看explainshell

引用自:https://unix.stackexchange.com/questions/106518