2010-05-10 41 views
8

Có cách nào để tạm dừng một tiến trình (chạy từ một tệp thực thi) để nó dừng tải CPU trong khi nó bị tạm dừng và đợi cho đến khi nó được bỏ tạm dừng để tiếp tục công việc của nó? Có thể trong python, hoặc theo cách nào đó có thể truy cập được bằng python.Tạm dừng quy trình?

+0

bạn có nghĩa là luồng hoặc quy trình hệ thống đang chạy không? – ukanth

+1

quy trình hệ thống đang chạy. –

+0

Tôi sẽ có khuynh hướng giảm mức độ ưu tiên của quá trình thay vì "tạm dừng" nó. Bằng cách đó, các quy trình khác sẽ đi trước tiên –

Trả lời

4

bạn đang nghĩ đến SIGTSTP - cùng một tín hiệu xảy ra khi bạn đẩy CTRL-Z. Việc này sẽ tạm dừng quy trình cho đến khi nó được SIGCONT.

tất nhiên, một số chương trình chỉ có thể bắt và bỏ qua tín hiệu này, vì vậy nó phụ thuộc vào tệp thực thi. tuy nhiên, nếu bạn có thể tạm ngưng và tiếp tục thủ công, bạn cũng có thể thực hiện nó từ chương trình python. sử dụng os.kill()

+0

và làm thế nào để tôi hủy tạm ngưng nó để nó tiếp tục hoạt động từ nơi mà trước đây? –

+0

Gửi cho nó một SIGCONT –

+7

SIGSTOP không thể bị chặn và sẽ chính xác hơn một chút trong ngữ cảnh này, không đến từ một tty. http://en.wikipedia.org/wiki/SIGSTOP – msw

1

Có một (hầu như) mẹ đẻ cách để làm điều này bằng Python, và nó khá đơn giản:

import time 
time.sleep(5) 

Trong này đoạn mã, 5 là số lượng giây bạn muốn tạm dừng chương trình của mình.

+1

Điều này không trả lời được câu hỏi; đó là về tạm dừng * một quá trình *. – bfontaine

2

tôi chỉ thực hiện điều này với các tín hiệu trong python một cái gì đó như thế này:

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

signal.signal(signal.SIGUSR1, mysignalhandler) 

signal.pause() 

này sẽ tạm dừng ở dòng cuối cùng và gọi do_something() khi nó nhận được tín hiệu USR1, ví dụ thông qua một

kill -USR1 <pid> 

lệnh.

Điều này sẽ chỉ hoạt động trong UNIX.

Các vấn đề liên quan