Hacer una strace
de las tail -f
, que explica todo. La parte interesante:
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 fstatfs(3, {...}) = 0
13791 inotify_init() = 4
13791 inotify_add_watch(4, "/path/to/file", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 read(4, 0xd981c0, 26) = -1 EINTR (Interrupted system call)
¿Que hace? Configura un inotify
controlador para el archivo y luego espera hasta que ocurra algo con este archivo. Si el núcleo dice a tail
través de este controlador inotify, que el archivo cambió (normalmente, se adjuntó), entonces tail
1) busca 2) lee los cambios 3) los escribe en la pantalla.
/proc/3844/fd/1
en su sistema hay un enlace simbólico /dev/pts/14
, que es un dispositivo de caracteres. No existe algo así como un "mapa de memoria", al que se pueda acceder con eso. Por lo tanto, no hay nada cuyos cambios se puedan firmar en la notificación, ya que no hay un disco o área de memoria a la que se pueda acceder.
Este dispositivo de caracteres es un terminal virtual, que prácticamente funciona como si fuera un socket de red. Los programas que se ejecutan en este terminal virtual se conectan a este dispositivo (como si se conectara a un puerto TCP) y escriben en lo que quieren escribir. También hay cosas más complejas, por ejemplo, bloquear la pantalla, secuencias de control de terminal y demás, que normalmente se manejan mediante ioctl()
llamadas.
Creo que de alguna manera quieres ver una terminal virtual. Se puede hacer en Linux, pero no es tan simple, necesita algunas funciones de proxy de red y un poco de uso complicado de estas ioctl()
llamadas. Pero hay herramientas que pueden hacer eso.
Actualmente no puedo recordar qué paquete de Debian tiene la herramienta para este objetivo, pero con un poco de búsqueda en Google probablemente pueda encontrarlo fácilmente.
Extensión: como @Jajesh mencionó aquí (dale un +1 si me diste), la herramienta se llama watch
.
Extensión # 2: @kelnos mencionó, un simple cat /dev/pts/14
también fue suficiente. Lo intenté, y sí, funcionó, pero no correctamente. No experimentamos mucho con eso, pero me parece como si una salida de entrar en esa terminal virtual ido bien a la cat
orden, o en su ubicación original, y nunca a ambos. Pero no es seguro.