Archivos en la Categoría: wiki

bash – control de procesos (1)

IDs DE PROCESOS Y NÚMEROS DE JOBS

Los sistemas UNIX asignan un ID de proceso a cada proceso que ejecutamos. Si ejecutamos un proceso en background (&) lo veremos del siguiente modo:

$ eso &
[1] 945

donde:
[1]   Número de job
945   ID del proceso

El número de job no es asignado por el sistema operativo, sino por el shell.
A medida que ejecutemos procesos en background el shell les irá asignando números de job consecutivos.
Por ejemplo:

$ esto &
[2] 947

$ aquello &
[3] 949

FOREGROUND Y BACKGROUND

Los procesos lanzados en background pierden la entrada estándar del terminal, con lo que no pueden leer del terminal, pero mantienen la salida estándar y salida de errores estándar asociadas al terminal, con lo que si escriben un mensaje, lo podremos ver.

Una vez que lanzamos un job en background éste se está ejecutando hasta que acaba o necesita leer un valor de la entrada estándar. Podemos conocer el estado de los procesos que tengamos en background usando el comando jobs:

$ jobs
[1]  Detenido          esto
[2]- Hecho             aquello
[3]+ Ejecutando        eso

En este caso el comando eso se está ejecutando correctamente, por lo contrario, el proceso esto se encuentra detenido, lo cual indica que posiblemente esté esperando una entrada por teclado, y como la entrada estándar esta liberada del terminal, no puede leer.
En este caso debemos pasar el proceso a foreground, usando el comando fg, e ingresar los datos que el proceso esté pidiendo:

$ fg %esto
Continuar? (Y/N):

El comando fg sin argumentos pone en foreground el proceso mas reciente (el 3 en este caso).
Si queremos indicar un proceso a poner el foreground debemos indicar su número de job o su nombre precedidos por el símbolo `%'.

El `+' y `-' que vemos seguido al número de job, indica respectivamente el proceso más reciente y el anterior al más reciente.
Estos símbolos pueden utilizarse para referirse a los procesos también. Por ejemplo, para traer a foreground el job 3, usaríamos:

$ fg +

Otro modo de realizar la misma operación sería mediante el uso de los símbolos: `%%' y `%+'.

SUSPENDER Y REANUDAR UN JOB

Cuando un proceso se está ejecutando en foreground, el mismo tiene el control del teclado, no obstante puede existir alguna situación en donde sea necesario pasarlo a background.

Para ello podemos usar `^Z' (Ctrl+Z), lo que hace que el proceso que tenga el control del teclado se detenga y quede en background.
Luego podemos usar el comando bg para volver a pasar el proceso a ejecución.

Por ejemplo:

$ cp -r /un/directorio /otro/directorio
^Z
[1]+  Detenido                cp -r /un/directorio /otro/directorio

$ jobs
[1]+  Detenido                cp -r /un/directorio /otro/directorio

$ bg %1
[1]+ cp -r /un/directorio /otro/directorio &

$ jobs
[1]+  Ejecutando              cp -r /un/directorio /otro/directorio &

VER
bash – control de procesos (2)
bash, bash-builtins, bg, fg, jobs