Estoy escribiendo un script bash para usar inotifywaitpara monitorear un directorio y comenzar acciones cuando se detectan cambios. Algo como:
inotifywait -m ... | while read f; do something; done
Como inotifywaitno termina por sí solo, este script no se detendrá.
Entonces, mi plan era obtener el PID del proceso inotifywait, guardarlo en un archivo y hacer que un proceso diferente lo elimine más tarde, digamos como:
inotifywait -m ... | { echo ??PID?? > pid-file; while ... }
Pero no sé cómo obtener el PID. ¿Hay una manera simple de lograr esto? Otra forma es simplemente guardar el PID del script de shell $$en el archivo y eliminar todo el script de shell, pero quería hacer un poco de limpieza después del ciclo while.
He intentado usar coprocy creo que funcionará, pero parece más complicación de la necesaria.

pgrep inotifywait. Eso le dará el PID, para matar,pkill inotifwait.grep -v grep, en su lugarps -ef | grep [p]rocessname...haría lo mismo.-finterruptor si necesita hacer coincidir más nombres de ejecutables.Respuestas:
En una tubería, todos los procesos se inician simultáneamente , no hay uno que sea anterior a los demás.
Podrías hacerlo:
O portablemente:
También tenga en cuenta que cuando la subshell que ejecuta el
whileciclo termina,inotifywaitse eliminará automáticamente la próxima vez que escriba algo en stdout.fuente
Si necesita el ID del proceso en el bucle, imprímalo primero.
fuente
Esta respuesta SO parece aplicable:
fuente