2010-05-10 25 views
8

C'è un modo per mettere in pausa un processo (in esecuzione da un file eseguibile) in modo che interrompa il caricamento della CPU mentre è in pausa, e attende fino a quando non è in grado di continuare il suo lavoro? Forse in Python, o in qualche modo accessibile da Python.Mettere in pausa un processo?

+0

intendi thread o processo di sistema in esecuzione? – ukanth

+1

un processo di sistema in esecuzione. –

+0

Sarei propenso ad abbassare la priorità del processo piuttosto che "metterla in pausa". In questo modo, altri processi andranno per primi –

risposta

4

stai pensando a SIGTSTP - lo stesso segnale che si verifica quando si preme CTRL-Z. Questo sospende il processo finché non diventa SIGCONT.

ovviamente, alcuni programmi possono semplicemente catturare e ignorare questo segnale, quindi dipende dall'eseguibile. tuttavia, se puoi sospenderlo e riprenderlo manualmente, puoi farlo anche da un programma python. utilizzare os.kill()

+0

e come faccio a sospenderlo in modo che continui a funzionare da dove era prima? –

+0

Invia un SIGCONT –

+7

SIGSTOP non può essere bloccato e sarebbe leggermente più accurato in questo contesto, non proveniente da un tty. http://en.wikipedia.org/wiki/SIGSTOP – msw

1

C'è una (quasi) nativo modo di fare questo in Python, ed è abbastanza semplice:

import time 
time.sleep(5) 

In questo snippet, 5 è il numero di secondi che si desidera mettere in pausa il programma.

+1

Questo non risponde alla domanda; che tratta di mettere in pausa * un altro * processo. – bfontaine

2

Ho appena implementato questo con segnali in pitone qualcosa di simile:

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

signal.signal(signal.SIGUSR1, mysignalhandler) 

signal.pause() 

verrà sospesa l'ultima riga e chiamare do_something() quando riceve il segnale USR1, ad esempio attraverso un

kill -USR1 <pid> 
Comando

.

Tuttavia, funziona solo in UNIX.

Problemi correlati