
Me gustaría ver el progreso de un comando que sé que llevará unas seis horas. Ejecuté un script de actualización y olvidé usar -v (o lo que debería haber hecho para "observar" el progreso), así que no tengo forma de saber qué tan avanzado está el proceso.
En caso de que aplique, el comando que utilicé fue:
drush cvupdb
Para actualizar una instalación de CiviCRM, pero esta pregunta realmente no se aplica específicamente a CiviCRM. La respuesta puede aplicarse universalmente a cualquier proceso que ya esté en ejecución. Habría agregado esta pregunta como comentario a publicaciones muy similares, pero aún no tengo suficiente reputación, así que necesitaba comenzar un tema nuevo. ¡Gracias!
Respuesta1
Si tiene el código fuente del programa, puede ver lo que -v
hace la opción. A menudo simplemente establece una variable denominada detallada, algo como:
int verbose=0
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v':
verbose= 1;
break;
En tal caso, y si el programa contiene información de depuración (tabla de símbolos), es posible adjuntar un depurador al proceso en ejecución y configurar la variable apropiadamente:
gdb -p <pid>
n
n
...
set variable verbose=1
c
Respuesta2
Respuesta corta: no puedes hacer esto en general.
Para su problema específico, para verificar si está haciendo algo, use top
. Simplemente ejecute el top
comando y los procesos que utilizan la mayor cantidad de CPU aparecerán en la parte superior. Si está funcionando, drush
probablemente debería estar cerca de la cima.
Respuesta3
Generalmente, lo primero que hace un comando o script es leer los parámetros, por lo que la respuesta corta es no. E incluso si el programa realizó algún trabajo de configuración y luego leyó los parámetros, necesitaría piratear la memoria de un proceso en ejecución.
Entonces, para responder a la pregunta de si el proceso se está ejecutando, desde la línea de comando, asumiendo que su ID de usuario que utilizó para ejecutar el proceso es c.hall
entonces
ps -fu c.hall
Lo que enumerará todos los procesos que se ejecutan con esa ID de usuario. Ahora, si el proceso inicia un proceso demonio, es más complicado, pero esto debería ser suficiente para comenzar.
Respuesta4
Como se indica enLa respuesta de Mark Stewart., en general no hay forma de cambiar los parámetros de un comando después de iniciarlo.
Sin embargo, en algunos casos es posible determinar el progreso de un proceso externamente. Por ejemplo, enviar una señal a un dd
proceso USR1
hace que imprima su progreso y continúe:
kill -USR1 $(pgrep dd)
Para procesos que leen o escriben archivos, puede utilizarprogress
(solo en Linux) para realizar un seguimiento de cuánto se leen o escriben, y tal vez tener una idea del tiempo restante; al menos, verá si el proceso todavía está haciendo algo:
progress -m -c dd
monitorearía un dd
proceso.