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.