Estoy escribiendo un script bash para usar inotifywait
para monitorear un directorio y comenzar acciones cuando se detectan cambios. Algo como:
inotifywait -m ... | while read f; do something; done
Como inotifywait
no 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 coproc
y 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.-f
interruptor 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
while
ciclo termina,inotifywait
se 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