2015-08-14 5 views
1

Есть ли способ запустить и остановить процесс с python? Я говорю о продолжении процесса, который я останавливаю с помощью ctrl + z при нормальной работе. Я хочу начать процесс, подождать некоторое время и затем убить его. Я использую linux.Запуск и остановка внешнего процесса из python

this question не похож на меня, потому что там пользователю нужно только запустить процесс. Мне нужно запустить его, а также остановить его.

+0

Возможный дубликат: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python?rq=1 – serk

+0

я был в состоянии сделайте то, что я хотел, благодаря этому сообщению http://stackoverflow.com/questions/636561/how-can-i-run-an-external-command-asynchronously-from-python – Javi

ответ

1

Может быть, вы можете использовать модуль Process:

from multiprocessing import Process 
import os 
import time 

def sleeper(name, seconds): 
    print "Sub Process %s ID# %s" % (name, os.getpid()) 
    print "Parent Process ID# %s" % (os.getppid()) 
    print "%s will sleep for %s seconds" % (name, seconds) 
    time.sleep(seconds) 

if __name__ == "__main__": 
    child_proc = Process(target=sleeper, args=('bob', 5)) 
    child_proc.start() 
    time.sleep(2) 
    child_proc.terminate() 
    #child_proc.join() 
    #time.sleep(2) 
    #print "in parent process after child process join" 
    #print "the parent's parent process: %s" % (os.getppid()) 
+0

С чего начать свой внешний процесс? – Javi

1

Вы можете использовать функцию os.kill отправить -SIGSTOP (-19) и -SIGCONT (-18)

Пример (непроверенные):

import signal 
from subprocess import check_output 

def get_pid(name): 
    return check_output(["pidof",name]) 

def stop_process(name): 
    pid = get_pid(name) 
    os.kill(pid, signal.SIGSTOP) 

def restart_process(name): 
    pid = get_pid(name) 
    os.kill(pid, signal.SIGCONT) 
+0

Я попробую, спасибо – Javi

3

Я хочу начать процесс, подождать некоторое время, а затем убей это.

#!/usr/bin/env python3 
import subprocess 

try: 
    subprocess.check_call(['command', 'arg 1', 'arg 2'], 
          timeout=some_time_in_seconds) 
except subprocess.TimeoutExpired: 
    print('subprocess has been killed on timeout') 
else: 
    print('subprocess has exited before timeout') 

См Using module 'subprocess' with timeout

+0

Элегантный - избегает любой необходимости явно называть 'kill'. Однако следует отметить, что для Python> 3.3 - для использования в Python 2.7 вам необходимо использовать модуль [subprocess32 backport module] (https://pypi.python.org/pypi/subprocess32/). –

Смежные вопросы