meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
linux:procesos [2018/02/28 13:07] lclinux:procesos [2023/01/18 14:10] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 {{tag>procesos background }} {{tag>procesos background }}
 ===== Procesos en Background ===== ===== Procesos en Background =====
-Una de las grandes ventajas de linux es la ejecución de procesos en background. Por ejemplo si sabemos que la copia de un fichero puede llevar mucho tiempo y no queremos estar esperando a que termine para seguir trabajando entonces podemos lanzarlo en background. Para ello añadimos **&** al comando que queramos lanzar por ejemplo: <code> cp archivo1 archivo2 &</code>+Una de las grandes ventajas de linux es la ejecución de procesos en background. Por ejemplo si sabemos que la copia de un fichero puede llevar mucho tiempo y no queremos estar esperando a que termine para seguir trabajando entonces podemos lanzarlo en background. Para ello añadimos **&** al comando que queramos lanzar por ejemplo: <sxh> cp archivo1 archivo2 &</sxh>
  
-El proceso lo podemos pasar también a background  con  CTRL+z, **pero se queda parado** o volverlo a continuar en foreground con fg. +Si hemos lanzado un comando y lo queremos pasar a background presionamos CTRL+z, para parar el proceso y seguidamente escribimos **bg** para pasarlo a background,  o volverlo a continuar en foreground con **fg**.
- +
-Un proceso que este parado en background  (al pasarlo presionando CTRL +z) podemos ponerlo a continuar en background ejecutando la orden **bg**+
  
 Con el comando **jobs**, podemos ver los procesos que están corriendo y sus posiciones   Con el comando **jobs**, podemos ver los procesos que están corriendo y sus posiciones  
  
-Un proceso que este parado en background  (al pasarlo presionando CTRL +z) podemos ponerlo continuar en background de la siguiente forma:+Supongamos que acabo de ejecutar el comando visudo para editar el fichero de permisos de sudo, pero en un momento dado quiero pasarlo a background pulsando CTRL+Z con lo cual vuelvo a la consola. Para volverlo a llamar me basta con poner fg y el número de proceso
  
-ejecutamos <code> jobs -l </code> para averiguar el pid del proceso +==== Lanzar procesos con nohup ==== 
- ahora ejecutamos <code>kill -CONT pid_del_proceso </code>+Esto es útil si queremos lanzar procesos que no se terminen al matar el shell padre. Un claro ejemplo del uso de nohup es cuando hacemos una conexión remota por ssh para lanzar un proceso y no queremos que el proceso se pare al desconectarnos. 
 +<sxh>nohup proceso &</sxh>
  
 +Una buena practica sería redireccionar stdin, stdout y stderr, para: 
 +  - rastrear la salida de nuestro script en caso de producirse algún error
 +  - evitar problemas al terminar nuestra sesión ssh
  
-**Pongamos un ejemplo de lo anterior** +Por ejemplo: 
- +<sxh>nohup ./miscript.sh > foo.out 2> foo.err < /dev/null &</sxh> 
-Supongamos que acabo de ejecutar el comando visudo para editar el fichero de permisos de sudo, pero en un momento dado quiero pasarlo background pulsando CTRL+Z con lo cual vuelvo a la consolaPara volverlo a llamar me basta con poner fg y el número de proceso+==== screen ==== 
 + Si hemos lanzado algún proceso con nohup y & y en algún momento queremos volver ver que está pasando, no podríamos La única forma sería haber utilizado el comando **screen**
  
-=== Lanzar procesos con nohup === +El proceso sería el siguiente: 
-Esto es útil si queremos lanazar procesos que no se terminen al matar el shell padrepor ejemplo para crear scripts de inicio +  * lanzamos el script que necesitamos como parámetro del comando screen. 
-<code>nohup proceso &</code>+<sxh>screen ./miscript.sh</sxh> 
 +  * Presionamos  **CTRL+A d** para volver a la terminal a ejecutar otros comandos o simplemente para desconectarnos mientras sigue el proceso ejecutándose 
 +  * Cuando queramos volver a conectarnos a nuestro procesolo primero es saber el identificador del screen  
 +<sxh>screen -ls</sxh> 
 +<file> 
 +root@bananapi:~# screen -ls 
 +There are screens on: 
 +              24274.pts-0.bananapi    (04/27/2018 11:20:49 PM)        (Detached) 
 +2 Sockets in /run/screen/S-root. 
 +</file> 
 +  * Para reconectarnos al proceso usamos el parámetro -r y el identificador de la sesión. 
 +<sxh>screen -r 24274.pts-0.bananapi</sxh>
  
 +=== Opciones de screen ===
 +| ctrl + a y después d|Para salir|
 +| Ctrl.+a  “| para ver las sesiones|
 +| Ctrl.+a n o [espacio]| se mueve hacia delante|
 +| Ctrl.+a p |se mueve hacia atrás|
 +|Ctrl.+a c |crea una nueva sesión|
 +|Ctrl.+a ? |ayuda|
 +|Ctrl.+a a |manda a un screen a lo que se está ejecutando|
 +|screen –ls |lista todos los screen abiertos|
 +|screen –x |si sólo hay uno abre ese. Si hay más de uno muetra una lista y entonces habría que hacer screen –x –r <sid>|