「sudo」プロセスを含まずにプロセスを「sudo pkill」するきちんとした方法はありますか?

「sudo」プロセスを含まずにプロセスを「sudo pkill」するきちんとした方法はありますか?

sudoで実行されている一部のプロセスを終了し、フルネームで一致させ、生のコマンド呼び出しの数を数える必要があります。

各プロセスにはコマンド自体とコマンドsudo自体の2つのプロセスがありますが、この問題を解決できます。

$ sudo -b perf record sleep 100

$ pgrep -fa '/perf record'
2245700 /usr/lib/linux-tools/.../perf record sleep 100

問題は、私が呼び出すときに自分自身をsudo pkill見つけて殺して計算することです。

$ sudo pkill -ef '/perf record' | wc -l
2

この場合、pkillに自分自身を含めないようにする簡単な方法はありますか?

私は許可されたpidファイルを試しましたが、pgrep / pkillドキュメントが見つからないため、デフォルトのフォーマットでは機能しないようです。

$ pgrep -f '/perf record' | tee /tmp/pids
$ sudo pkill -F /tmp/pids
 killed (pid 2249211)

最初の人だけが殺されるからです。文書には次のように記載されています。

       -F, --pidfile file
              Read PID's from file.  This option is perhaps more useful for pkill than pgrep.

しかし、その意味はあいまいですPID's

ベストアンサー1

努力する:

sudo pkill -ef '/[p]erf record' | wc -l

以下は、1文字だけを含む文字クラスを使用するヒントですp

正規表現で を探していますが、/perfコマンドsudo pkillラインにはありますが、/[p]erf一致しません。

このアプローチは、次のコマンドで数十年間使用されてきました。ps aux | awk '/[f]oo/ {print $1}'

おすすめ記事