Linux/Unix Shell Scripting - Pausar y reanudar procesos desde otra terminal

   
Vista:
Imágen de perfil de dryant

Pausar y reanudar procesos desde otra terminal

Publicado por dryant (9 intervenciones) el 25/01/2014 01:53:31
Hola a todos!

Hay alguna forma de detener un proceso sin terminarlo para poder reanudarlo despues?

Y para hacer lo mismo desde otra terminal?

Saludos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de barna_rasta

Pausar y reanudar procesos desde otra terminal

Publicado por barna_rasta (33 intervenciones) el 25/01/2014 02:08:46
Hola Dryant,

Para pausar un proceso deberemos conocer previamente el PID o identificador, esto lo obtenemos con
# ps -aux | more

Teniendo el PID del proceso podemos pausarla con:

# kill -STOP [ PID ]

Lo reanudamos con:

# kill -CONT [ PID ]
------------------------------------------------
De poder hacerlo en otra terminal .................. pues inicialmente no le veo inconveniente, aunque es algo que no experimente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant

Pausar y reanudar procesos desde otra terminal

Publicado por dryant (9 intervenciones) el 25/01/2014 02:19:25
Hola Barna_rasta

Gracias por tu respuesta! En otra terminal me referia en otra ventana de terminal.
Porque con Jobs, no me aparecen en otra ventana.

Una curiosidad.

He creado un guion llamado 7-4.sh como este:

1
2
3
4
5
6
#!/bin/bash
 
( for (( i = 0; i < 1000; i++ )); do
	echo $i
	sleep 1
done )

y lo ejecuto en una ventana de terminal.

Abro otra ventana para probar lo que me dices y al ejecutar el stop me sale esto en la ventana en la cual se estaba ejecutando el guion:
[1]+ Stopped ./7-4.sh
dryant$

Pero siguen saliendo los numeros secuencialmente.

Es decir, me hace la detencion, me salta a la linea de comandos y me sigue ejecutando el script
Sabes por que?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de barna_rasta

Pausar y reanudar procesos desde otra terminal

Publicado por barna_rasta (33 intervenciones) el 25/01/2014 14:42:20
Buenos dias Dryant,
reproduje tu ejemplo y salvo la eliminacion de un par de parentesis:
1
2
3
4
5
#!/bin/bash
for (( i = 0; i < 1000; i++ )); do
echo $i
sleep 1
done
Tengo GNU bash, version 4.2.37 en Debian-Wheezy

lo ejecuto en consola/terminal ( ALT+F1 )
# bash prova
------------ abro ( ALT+F2 ) y ejecuto
# ps -aux | grep prova para localizar el PID
# kill -STOP [PID] detiene
# kill -CONT [PID] reanuda ( en F1 )
# kill -SIGKILL [PID] finaliza

=================================================================
Para hacerlo bajo " sh " seria:
1
2
3
4
5
6
7
#!/bin/sh
 
for i in $(seq 0 1000)
do
    echo $i
    sleep 1
done

Ejecutamos
# sh prova
===========================================================
Quiero pensar que quizas, y es dificil poder reproducir exacto tu problema en mi equipo,
que el problema se basa en que -quizas- ejecutes el script definido como /bin/bash en la forma
# . 7-4.sh
y lo que estas pausando sea el " sleep " pues el script abre dos PID.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de dryant

Pausar y reanudar procesos desde otra terminal

Publicado por dryant (9 intervenciones) el 25/01/2014 17:35:53
Efectivamente Barna_rasta!!!

Estaba ejecutando un archivo .sh con un Bash!!

Ha sido cambiar el #!/bin/bash por #!/bin/sh y me ha funcionado perfectamente!!

Muchas Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pausar y reanudar procesos desde otra terminal

Publicado por Tom (253 intervenciones) el 28/01/2014 09:12:22
Por culturilla shell, que nunca viene mal.
Cuando en un shell script pones un bloque de código entre paréntesis, como lo tenías originalmente, significa que eso se ejecuta en un sub-shell, es decir en un nuevo subproceso de bash.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar