Ejecutando un proceso en segundo plano

Ejecutando un proceso en segundo plano

Tengo 2 preguntas sobre cómo iniciar los procesos en segundo plano:

  1. ¿Por qué iniciar un proceso en segundo plano es así?

    ./my_program &

    ( my_programpor supuesto, tiene permisos exe establecidos) ¿no hace que bash imprima el símbolo del sistema como cualquier otro comando? Simplemente dejó una nueva línea vacía con un cursor parpadeante.

  2. Cuando ejecuto el siguiente proceso nuevo en segundo plano, bash muestra algo. como eso:

    ./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program

    ¿Significa esto que iniciar otros procesos adicionales en segundo plano hace que el sistema muestre información sobre los procesos de vista previa ( [27], [28], [29] líneas) tan largos como los iniciados actualmente) ( [30]línea)?

Respuesta1

  1. Esto no debería suceder. Cuando ejecuta un comando en segundo plano, generalmente solo imprime el número de trabajo y el pid (ver más abajo) y luego regresa al símbolo del sistema.

    La única razón por la que sé que lleva a bash a dejarte con una nueva línea en esta situación es si tu comando en realidad no existe, ya que de alguna manera dará el mensaje de error después de imprimir PS1:

    $ nonexistant_command &
    [1] 13856
    $
    nonexistant_command: command not found
    <empty line with blinking cursor here>
    

    Cualquiera que sea la causa, presionar Intro mientras estás en esta línea vacía debería imprimir una nueva línea con tu mensaje habitual (y, posiblemente, el mensaje de que el trabajo que acabas de generar finalizó; ver más abajo).

  2. El resultado adicional que ve es bash que le informa sobre los trabajos en segundo plano actuales:

    Primero, le indica el número de trabajo actual de cualquier proceso en segundo plano recién creado junto con su pid, así:

    $ some_command &
    [1] 1234
    

    Esto significa que el comando some_commandahora se ejecuta con el pid 1234 como trabajo 1.

    Una vez que finaliza un trabajo en segundo plano, bash le notificará esto la próxima vez que imprima un símbolo del sistema (ya sea porque generó otro proceso en segundo plano, ejecutó un comando en primer plano o simplemente presionó Intro con una línea de comando vacía) imprimiendo un mensaje como este:

    [1]  Done                    some_command
    

    Esto significa que el trabajo con el número 1 que se ejecutó some_commandya ha finalizado.

    Para saber qué trabajos en segundo plano está rastreando actualmente Bash, puede usar el jobscomando incorporado de esta manera:

    $ jobs
    [1]  Running                 some_command &
    [2]  Running                 some_other_command &
    

    Para poner un trabajo en primer plano, puede utilizar fg:

    $ fg 2
    some_other_command
    

    Para obtener más información sobre esto, intentehelp jobs

información relacionada