Notificar cambios en un file en / proc

He escrito un pequeño 'daemon' en bash que cambiará a los auriculares si se detectan, y si no, cambia a un altavoz USB externo con PulseAudio.

Lo que estoy buscando es una forma de get notifications de los cambios en el file /proc/asound/card0/codec#0 , al igual que inotifywait en los files reales (considerando que los files en / proc son como "pseudo-files") .

Encuentro mi código un poco loco, porque ejecuta sleep 1 con awk durante todo el día, es decir, 86400 veces al día 🙂

 while sleep 1; do _1=${_2:-} _2=$(awk '/Pin-ctls/{n++;if(n==4)print}' '/proc/asound/card0/codec#0') [[ ${_1:-} = $_2 ]] || if [[ $_2 =~ OUT ]]; then use_speakers else use_internal fi done 

Lo que estoy buscando es algo así como (este ejemplo no funciona):

 codec=/proc/asound/card0/codec#0 while inotifywait $codec; do if [[ $(awk '/Pin-ctls/{n++;if(n==4)print}' $codec) =~ OUT ]]; then use_speakers else use_internal fi done 

De esta forma, los commands dentro del bucle se ejecutarán solo cuando haya cambios reales en el file $codec .

Related of "Notificar cambios en un file en / proc"

Lo que estoy buscando es una forma de recibir notifications de cambios en el file [en proc]

No puedes, porque no son files. Esta no es una pregunta completamente duplicada, pero la respuesta aquí explica por qué.

/proc es una interfaz de kernel. No hay files reales allí, por lo tanto, no pueden cambiar. La lectura de los identificadores es una request y la información en el file cuando la lee es una respuesta a eso.

La única forma en que podría simular algo como esto sería leer el file a intervalos y comparar el contenido para ver si la respuesta del kernel ha cambiado, parece que ya lo hizo.

Si registra los files de procfs, el time y el mtime serán los mismos: para algunos files, siempre que sea la llamada de estado, para otros un momento desde el inicio del sistema. En el primer caso, siempre parece haber cambiado, en el segundo, nunca parece haber cambiado.

Si está utilizando PulseAudio, pactl subscribe hace.

También tenga en count que algunos files en /proc/ permiten que se monitoreen los cambios a través de sondeo, por ejemplo, si usted hace man proc , puede leer lo siguiente sobre el file /proc/self/mounts :

/ proc / [pid] / mounts (desde Linux 2.4.19) Este file enumera todos los filesystems actualmente montados en el espacio de nombre de assembly del process (vea mount_namespaces (7)). El formatting de este file está documentado en fstab (5).

Desde kernel versión 2.6.15, este file es pollable: después de abrir el file para lectura, un cambio en este file (es decir, un assembly o desassembly del sistema de files) hace que select (2) marque el descriptor del file como que tiene una condición excepcional, y poll (2) y epoll_wait (2) marcan el file como teniendo un evento de prioridad (POLLPRI). (Antes de Linux 2.6.30, un cambio en este file fue indicado por el descriptor de file marcado como legible para select (2), y marcado como que tenía una condición de error para poll (2) y epoll_wait (2)).

Y eso es exactamente lo que se está implementando en la siguiente pregunta:

https://stackoverflow.com/questions/5070801/monitoring-mount-point-changes-via-proc-mounts