2010-03-08 11 views
34

Tôi đang chạy mô phỏng dài trong MATLAB mà tôi đã nhận ra rằng tôi cần dừng và chạy lại. Tuy nhiên, MATLAB thực sự là tính toán này, và nó ngừng đáp ứng. Làm thế nào tôi có thể làm gián đoạn hoạt động này mà không giết chết MATLAB?Làm thế nào tôi có thể ngắt MATLAB khi nó thực sự thực sự bận rộn?

(Tôi nhận thấy đây là một vấn đề với nhiều chương trình Windows, nhưng nó thực sự cấp tính với MATLAB.)

+1

Ctrl-C không hoạt động? – Dirk

+2

Nhân bản: http://stackoverflow.com/questions/1500314/how-to-abort-a-running-program-in-matlab – gnovice

+1

Không, đó là vấn đề. –

Trả lời

22

Đến cửa sổ lệnh, và nhấn Ctrl-C rất nhiều. Từ kinh nghiệm của tôi, trên một máy tính đơn lõi, bạn không có cơ hội, trừ khi bạn thực hiện rất nhiều đầu ra. Trên một máy đa lõi hoặc đa bộ xử lý, có thể bạn sẽ dừng nó cuối cùng, nhưng phải mất thời gian.

cũng Xem http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html

Added: nó là một thực hành tốt để (1) lưu một bản chụp của không gian làm việc của bạn trước khi chạy bất cứ điều gì thực sự dài và (2) trong một tính toán rất dài, hãy viết một số biến vào một tập tin theo thời gian, để bạn có thể tiếp tục tính toán nếu nó bị gián đoạn (do mất điện, ví dụ).

+1

Tôi đồng ý, nhưng đôi khi tôi giết nó bằng Trình quản lý tác vụ Windows chứ không phải bashc Ctrl-C như một con khỉ đã chết. –

+4

+1: Đánh CTRL-C như một cơn điên thường hoạt động, nhưng có những tình huống khi tắt tất cả mọi thứ là tất cả những gì có hiệu quả. Đó là một chút khó chịu để nói rằng ít nhất ... –

18

MATLAB đáp ứng như thế nào với CTRL-C thay vì phụ thuộc vào những gì nó đang làm. Nếu đó là ở giữa một cuộc gọi BLAS hoặc LAPACK ví dụ, nó sẽ không đáp ứng cho đến khi cuộc gọi đó trở lại. Nếu bạn đang ở trong một khối mã mà nhiều dòng MATLAB đang được thực hiện, bạn có thể mong đợi CTRL-C phản ứng nhanh hơn.

1

bạn có thể tìm thấy quy trình MATLAB trong trình quản lý tác vụ cửa sổ và đặt mức độ ưu tiên là cao hoặc thấp và để chương trình khác có mức độ ưu tiên thấp hơn hoặc cao hơn. Theo kinh nghiệm của tôi, đó là một cách hiệu quả.

5

Một chiến lược để đối phó với vấn đề này là để giới thiệu một tạm dừng rất ngắn ở đâu đó trong tính toán (đặc biệt là trong một for hoặc while loop), như trong:

for ii = 1:N 
do_stuff(); 
pause(0.1); 
end 

Điều này làm tăng cơ hội mà Ctrl điên cuồng của bạn -C'ing sẽ thực sự ngăn chặn nó.

-3

nếu bạn wont phải dừng lại và chạy lại sau đó giết chết không phải là xấu choise Đến cửa sổ nhiệm vụ Manager-> Processes sau đó bị phạt MATLAB.exe và nhấn nút End Process

+11

OP cho biết "* mà không * giết chết MATLAB". – Jeroen

+0

>> 'Tôi đã nhận ra rằng tôi cần phải dừng lại và chạy lại' –

+1

Dừng và chạy lại ** không giống ** như giết MATLAB. OP có thể muốn bảo tồn một số biến từ không gian làm việc đã được tạo trước khi chạy tập lệnh. Killing MATLAB sẽ mất mọi thứ, bao gồm cả các biến đó. -1. – rayryeng

6

Tôi đã có một mẹo rất đơn giản để tạm dừng (hoặc dừng) thực thi không đáp ứng. Nếu mô phỏng của tôi đang chạy một vòng dài tôi luôn làm như sau:

for ii = 1:N 
    do_stuff(); 
    clear empty_script; 
    empty_script; 
end 

Và sau đó tạo ra một tập tin empty_script.m chứa sau:

%keyboard 

Bất cứ khi nào tôi muốn tạm dừng thực hiện Tôi mở một văn bản bên ngoài chỉnh sửa và bỏ ghi chú dòng nói rằng keyboard trong empty_script.m. Điều đó khiến tôi ở chế độ gỡ lỗi nơi tôi có thể xem các biến, sửa đổi nội dung hoặc thậm chí là dừng chương trình.