2010-05-10 14 views
8

¿Hay alguna manera de pausar un proceso (ejecutando desde un ejecutable) para que detenga la carga de la CPU mientras está en pausa, y espera hasta que esté sin pausar para continuar con su trabajo? Posiblemente en python, o de alguna manera accesible por python.¿Pausando un proceso?

+0

¿te refieres a proceso de hilo o sistema en ejecución? – ukanth

+1

un proceso de sistema en ejecución. –

+0

Me inclinaría a reducir la prioridad del proceso en lugar de "detenerlo". De esta forma, otros procesos irán primero al –

Respuesta

4

estás pensando en SIGTSTP - la misma señal que ocurre cuando presionas CTRL-Z. Esto suspende el proceso hasta que se obtiene SIGCONT.

Por supuesto, algunos programas simplemente pueden capturar e ignorar esta señal, por lo que depende del ejecutable. sin embargo, si puede suspenderlo y reanudarlo manualmente, también puede hacerlo desde un programa de Python. utilizar os.kill()

+0

y ¿cómo lo vuelvo a suspender para que continúe funcionando desde donde estaba antes? –

+0

Enviar un SIGCONT –

+7

SIGSTOP no se puede bloquear y sería un poco más preciso en este contexto, no proveniente de un tty. http://en.wikipedia.org/wiki/SIGSTOP – msw

1

No es un (casi) nativa manera de hacer esto en Python, y es bastante simple:

import time 
time.sleep(5) 

En este snippet, 5 es el número de segundos que desea detener su programa.

+1

Esto no responde la pregunta; que se trata de pausar * otro * proceso. – bfontaine

2

acabo implementado esto con señales de pitón o menos así:

def mysignalhandler(sig, frame): 
    print "Got " + str(sig) 
    if sig == signal.SIGUSR1: 
    do_something() 

signal.signal(signal.SIGUSR1, mysignalhandler) 

signal.pause() 

Esto se detendrá en la última línea y llamar do_something() cuando recibe la señal USR1, por ejemplo a través de un

kill -USR1 <pid> 

comando.

Sin embargo, esto solo funcionará en UNIX.

Cuestiones relacionadas