Я пишу сценарий bash, чтобы использовать его inotifywait
для мониторинга каталога и запуска действий при обнаружении изменений. Что-то типа:
inotifywait -m ... | while read f; do something; done
Так inotifywait
как сам по себе не завершается, этот скрипт не остановится.
Поэтому я планировал получить PID процесса inotifywait, сохранить его в файл, а потом уничтожить другим процессом, например:
inotifywait -m ... | { echo ??PID?? > pid-file; while ... }
Но я не знаю, как получить PID. Есть ли простой способ добиться этого? Другой способ - просто сохранить PID shell-скрипта $$
в файл и убить весь shell-скрипт, но я хотел сделать некоторую очистку после цикла while.
Я пытался использовать, coproc
и я думаю, что это будет работать, но это кажется более сложным, чем необходимо.
pgrep inotifywait
. Это даст вам PID, чтобы убитьpkill inotifwait
.grep -v grep
, вместо этогоps -ef | grep [p]rocessname...
будет делать то же самое.-f
переключатель, если вам нужно сопоставить больше имени исполняемого файла.Ответы:
В конвейере все процессы запускаются одновременно , нет ни одного, который раньше, чем другие.
Вы могли бы сделать:
Или переносимо:
Также обратите внимание, что когда подоболочка, выполняющая
while
цикл, завершается,inotifywait
она будет автоматически уничтожена при следующей записи чего-либо в стандартный вывод.источник
Если вам нужен идентификатор процесса в цикле, сначала напечатайте его.
источник
Этот SO ответ кажется применимым:
источник