una teclado sierra pro pegar pantalla macbook mac las high hacer guardan donde con como capturas captura macos process cron stdout capture

macos - teclado - como pegar una captura de pantalla en mac



¿Cómo puedo capturar la salida estándar de un proceso que YA se está ejecutando? (5)

Verdadera solución para OSX

Escriba la siguiente función en su ~/.bashrc o ~/.zshrc .

capture() { sudo dtrace -p "$1" -qn '' syscall::write*:entry /pid == $target && arg0 == 1/ { printf("%s", copyinstr(arg1, arg2)); } '' }

Uso:

example@localhost:~$ perl -e ''STDOUT->autoflush; while (1) { print "Hello/n"; sleep 1; }'' >/dev/null & [1] 97755 example@localhost:~$ capture 97755 Hello Hello Hello Hello ...

https://github.com/mivok/squirrelpouch/wiki/dtrace

NOTA:

Debe deshabilitar la restricción dtrace en El Capitán o posterior.

csrutil enable --without dtrace

Tengo un trabajo cron en ejecución que durará un tiempo y me gustaría ver su salida estándar. No sé cuán importante es el hecho de que el proceso fue iniciado por cron, pero me imagino que lo mencionaría. Esto está en OSX, así que no tengo acceso a cosas como ... / proc / [pid] / ..., truss, o strace. Las sugerencias de ejecución con redirección de IO (p. Ej., script > output & tail -f output ) NO son aceptables, porque este proceso ya está en ejecución 1), y 2) no se puede detener / reiniciar con la redirección. Si hay soluciones generales que funcionarán en varios Unices, eso sería lo ideal, pero específicamente estoy tratando de lograr esto en una Mac ahora mismo.


Creo que el hecho de que empezaste con cron podría salvarte. Bajo Linux, cualquier salida estándar de un trabajo cron se envía a la cuenta de correo de Unix del usuario que posee el trabajo. Aunque no estoy seguro de OSX. Lamentablemente, tendrá que esperar a que finalice el trabajo antes de que se envíe el correo y podrá ver el resultado.


DESCARGO DE RESPONSABILIDAD: No hay idea de si Mac tiene esto. Esta técnica existe en Linux. YMMV.

Puede capturar stdout / err desde / proc (asumiendo los privilegios adecuados):

PID=$(pidof my_process) tail -f /proc/$PID/fd/1

O toma todo lo que queda en el búfer en un archivo:

cat /proc/$PID/fd/1

PS: fd / 1 es stdout, fd / 2 es stderr.

EDIT: Alex brown> Mac no tiene esto, pero es un consejo útil para Linux.


use dtruss -p <PID> , o incluso rwsnoop -p <PID> .


neercs tiene la capacidad de "capturar" programas que se iniciaron fuera de él. Tal vez funcione para usted. Por cierto, no tienes truss o strace, pero sí tienes dtrace.