inotifywait
ディレクトリを監視し、変更が検出されたときにアクションを開始するために使用するbashスクリプトを書いています。何かのようなもの:
inotifywait -m ... | while read f; do something; done
inotifywait
はそれ自体で終了しないため、このスクリプトは停止しません。
したがって、私の計画は、inotifywaitプロセスのPIDを取得し、それをファイルに保存して、後で別のプロセスに強制終了させることでした。
inotifywait -m ... | { echo ??PID?? > pid-file; while ... }
しかし、私はPIDを取得する方法がわかりません。これを達成する簡単な方法はありますか?もう1つの方法は、シェルスクリプトのPIDを$$
ファイルに保存してシェルスクリプト全体を強制終了することですが、whileループの後にいくつかのクリーンアップを実行したいと思いました。
私は使ってみましcoproc
たが、うまくいくと思いますが、必要以上に複雑に思えます。
このようなものを使用できます `ps -ef | grep processName | grep -v grep | awk '{print $ 2}' | xargs kill -9 `
—
Kiwy
@Kiwy-その混乱の代わりにただ
—
slm
pgrep inotifywait
。これにより、PIDが得られますpkill inotifwait
。
@slmはシステムによって異なりますが、grepとpsが存在する間はpgrepとpkillは存在しません。どういたしまして
—
Kiwy
@Kiwy-疑わしい、これらのツールはかなりユビキタスです。また、を実行する必要はなく
—
slm
grep -v grep
、代わりps -ef | grep [p]rocessname...
に同じことを行います。
@DavidsonChua-はい
—
slm
-f
、実行可能ファイル名の多くと照合する必要がある場合は、スイッチを使用できます。