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?
risposta
Utilizzando psutil (https://github.com/giampaolo/psutil):
>>> import psutil
>>> somepid = 1023
>>> p = psutil.Process(somepid)
>>> p.suspend()
>>> p.resume()
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()
e come faccio a sospenderlo in modo che continui a funzionare da dove era prima? –
Invia un SIGCONT –
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
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.
Questo non risponde alla domanda; che tratta di mettere in pausa * un altro * processo. – bfontaine
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.
intendi thread o processo di sistema in esecuzione? – ukanth
un processo di sistema in esecuzione. –
Sarei propenso ad abbassare la priorità del processo piuttosto che "metterla in pausa". In questo modo, altri processi andranno per primi –