2009-02-05 34 views
54

Tôi đang chạy chương trình dài trong máy từ xa và tôi muốn dừng chương trình đó, nhưng vấn đề của tôi là nếu tôi sử dụng lệnh kill thì chương trình sẽ thoát mà không lưu kết quả . Thông thường những gì tôi làm để hoàn thành chương trình đang sử dụng ctrl c và trong trường hợp đó chương trình lưu kết quả, nhưng ngay bây giờ tôi không có trong máy đang chạy phiên vì vậy tôi không thể làm ctrl c.Tương đương với ctrl c trong lệnh hủy chương trình

Câu hỏi của tôi là: có cách nào để thực hiện theo cách từ xa tương đương với ctrl c ?.

Trả lời

79

Hãy thử:

kill -SIGINT processPIDHere 

Về cơ bản Ctrl C gửi (ngắt) tín hiệu SIGINT khi kill gửi (chấm dứt) tín hiệu SIGTERM theo mặc định trừ khi bạn chỉ định các tín hiệu để gửi.

+0

Tôi làm cách nào để tìm hiểu processPID? Tôi đang sử dụng một vỏ web để kiểm tra ping trên router của tôi và sau đó tôi không thể giết chết quá trình ... –

+1

@AeroWang bạn có thể chạy một quá trình tìm kiếm cho 'ping' như thế này:' ps aux | grep "ping" ', số đầu tiên trong cột là pid. – adrianTNT

+0

đáng buồn là thông tin ping stdout sẽ áp đảo đầu vào của con người. @adrianTNT –

6

ctrl c chỉ gửi tín hiệu SIGINT, nhưng có một số tín hiệu khác hơi mềm hơn một chút. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html

Tôi nghĩ rằng bạn có thể sử dụng lệnh giết để gửi một số tín hiệu khác. (xem man giết để biết thêm)

+0

Upps Firas Assad đánh tôi với 35 giây ... – Johan

+0

Bình chọn cho thông tin sai trái thậm chí mâu thuẫn với toàn bộ câu hỏi. Ctrl + C không gửi SIGKILL. SIGKILL làm cho hạt nhân giết quá trình w/o thậm chí gửi bất kỳ tín hiệu cho quá trình trước nữa. – ypnos

4

Nếu bạn kiểm soát quá trình từ xa dài chạy, bạn có thể cài đặt một handler tín hiệu cho SIGTERM (xem man signalman sigaction và nhiều SO câu hỏi về chủ đề này), để dọn dẹp độc đáo trước chết.

Đó là điều rất phổ biến cần làm.

0

Xin lưu ý trong trình xử lý tín hiệu của bạn, nó giống như một trình xử lý ngắt trong đó bạn đang rất giới hạn về những gì bạn được phép thực hiện mà không làm hỏng phần còn lại của chương trình. Điều tốt nhất bạn có thể làm ở đây là đặt biến atomic_t "should_quit".

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