GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay alguna manera de escuchar el proceso?

Un enfoque, ciertamente de mano dura, es usar strace :

$ strace -e trace=none -e signal=none -p 12345

observará el proceso con PID 12345, sin interceptar ninguna llamada al sistema (primero -e ) y sin señales (segundo -e ). Una vez que el proceso sale de manera regular, se imprimirá el valor de salida.

Si el proceso termina con una señal, strace sale silenciosamente (cuando se ejecuta con las opciones dadas arriba). Puede utilizar, p. -e signal=kill para cambiar este comportamiento. Tenga en cuenta, sin embargo, que -e signal=all (o, de manera equivalente, omitiendo el -e signal opción) podría producir una gran cantidad de salida si el programa recibe y maneja las señales.


  1. Encadenamiento de la ejecución de "notify"

    $ process; notify $? &
    

    Tenga en cuenta que si el proceso se cierra de forma inesperada notify no se ejecutará

  2. Colocando trampas

    El proceso está señalado por señales de un significado diferente y puede reaccionar apropiadamente

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    

No tienes claro qué notificación tienes en mente. En esencia, puede ser cualquier cosa que te suene, por supuesto. Uno para muchos, por ejemplo. notify-send de libnotify biblioteca.

$ process; notify-send "process finished with status $?" &

Bash hace esto por ti. Le notificará cuando finalice el proceso devolviéndole el control y almacenará el estado de salida en la variable especial $? . Se ve más o menos así:

someprocess
echo $?

Consulte el manual de bash sobre parámetros especiales para obtener más información.

Pero supongo que quieres hacer otro trabajo mientras esperas. En bash puedes hacer eso así:

someprocess &
otherwork
wait %+
echo $?

someprocess & iniciará el proceso en segundo plano. Eso significa que el control regresará de inmediato y podrá hacer otro trabajo. Un proceso iniciado en segundo plano se denomina trabajo en bash. wait esperará a que finalice el trabajo dado y luego devolverá el estado de salida de ese trabajo. Los trabajos son referenciados por %n . %+ se refiere al último trabajo iniciado. Consulte el manual de bash sobre el control de trabajos para obtener más información.

Si realmente necesita el PID, también puede hacerlo así:

someprocess &
PID=$!
otherwork
wait $PID
echo $?

$! es una variable especial que contiene el PID del último proceso en segundo plano iniciado.


Linux
  1. ¿Hay alguna forma de cambiar las variables de entorno de otro proceso en Unix?

  2. ¿Hay alguna manera de 'uniq' por columna?

  3. ¿Hay alguna manera de inspeccionar el rpath actual en Linux?

  4. ¿Hay alguna forma de convertir de UTF8 a ISO-8859-1?

  5. ¿Hay alguna manera de continuar con el proceso de comando scp (copia segura) roto en Linux?

¿Hay alguna manera de reanudar un scp interrumpido de un archivo?

¿Hay alguna manera de reiniciar badblocks?

¿Hay alguna manera de limitar el consumo total de CPU?

¿Cuál es la mejor manera de aprender SELinux?

¿Hay alguna forma de seleccionar por varias condiciones en `ps`?

¿Hay alguna manera de volcar la información de CPUID de una CPU?