Ssh newbie: làm thế nào tôi có thể đảm bảo rằng một chương trình tôi đang chạy qua ssh đã kết thúc?


0

Xin lỗi trước cho những gì có lẽ là một câu hỏi đơn giản. Tôi có một số câu hỏi cơ bản về việc sử dụng ssh để chạy các chương trình mà tôi không thể giải quyết thông qua Google. Tôi đang sử dụng Unix (thông qua chương trình "Terminal" trên Mac OS 10.6.7).

Tôi đang truy cập vào một máy khác bằng ssh. Khi đó, tôi đang chạy một số mã. Điều này dẫn đến các tập tin đầu ra trong một thư mục trên máy đó. Tôi chấm dứt một cuộc chạy bằng cách làm "control C." Tôi thoát khỏi các tập tin đầu ra bằng cách làm:

find . -type f -name "*.vtk" -exec rm -f {} \;

Vấn đề là ở đó:

  1. Người có máy cho tôi biết có nhiều phiên bản mã của tôi đang chạy. Tôi không hiểu làm thế nào tôi không ngăn chặn những điều này bằng cách thực hiện "kiểm soát C." Bất cứ ai có thể giải thích?

  2. Ngoài ra (điều này có thể liên quan đến vấn đề đầu tiên), khi tôi chạy lệnh "tìm" ở trên để loại bỏ các tệp đầu ra, nếu tôi đợi vài giây / phút, một số tệp đầu ra đã xuất hiện trở lại! Điều này có thể liên quan đến các phiên bản "ma" của mã đang chạy mà tôi không thể chấm dứt không?

Nếu bất cứ ai có thể cho tôi biết làm thế nào để đảm bảo rằng tôi đã chấm dứt TẤT CẢ các lần chạy và cách loại bỏ TẤT CẢ các tệp đầu ra vtk (hoặc hậu tố khác) khỏi một thư mục, tôi thực sự sẽ đánh giá cao nó. Ngoài ra, bất kỳ đề xuất nào liên quan đến tài nguyên trực tuyến về tất cả các công cụ ssh này sẽ rất được hoan nghênh. Cảm ơn rất nhiều.


SSH chỉ cho phép bạn truy cập vào thiết bị đầu cuối của máy khác, nó không có quản lý quy trình đặc biệt, đây là tất cả linux và có thể được mô phỏng trên một máy cục bộ.

1
Ctrl+Cthông thường chấm dứt chương trình đang chạy trong thiết bị đầu cuối, nhưng các chương trình được phép bắt tín hiệu. Ngoài ra, nếu chương trình bao gồm một số quy trình, có thể không phải tất cả các quy trình sẽ bị giết. Bạn đã viết chương trình đó, hay bạn chỉ là người dùng của nó? Chương trình đó là gì? Biến thể nào của unix đang chạy trên máy từ xa? Chính xác thì bạn sử dụng lệnh ssh nào để chạy chương trình?
Gilles

Cảm ơn phản hồi của bạn, Gilles. Tôi đã viết chương trình. Đó là trong C ++. Tôi biên dịch nó bằng cách sử dụng "make" và sau đó tôi chạy nó bằng cách sử dụng "./programName" Ý của bạn là gì bởi "một số quy trình?" Thật không may, tôi không biết phiên bản unix nào đang chạy trên máy từ xa. Lệnh ssh tôi sử dụng để truy cập vào máy khác là: ssh -X myUserName @ ipAddressOfTheMachine.

@Ant: Chạy uname -srtrên máy từ xa để xem biến thể unix nào đang chạy. Bạn có sử dụng forkhoặc xử lý tín hiệu trong chương trình của bạn, hoặc một thư viện có thể sử dụng chúng dưới mui xe không?
Gilles

Cảm ơn một lần nữa Gilles ... Tôi nhận Linux 2.6.31.14-0.4 - máy tính để bàn làm đầu ra từ uname -sr trên máy khác. Tôi không biết xử lý ngã ba hoặc tín hiệu là gì! Xin lỗi vì sự thiếu hiểu biết của tôi. Tôi sử dụng "-X" khi truy cập vào máy khác và điều đó cho phép tôi sử dụng trình chỉnh sửa trong chương trình X11 (Mac) của mình.

Câu trả lời:


1

Nếu bạn không sử dụng các công cụ như screentất cả các chương trình đang chạy của bạn sẽ chấm dứt khi bạn đăng xuất khỏi phiên ssh của mình. Cũng Ctrl + Csẽ chấm dứt quá trình tiền cảnh hiện đang chạy. Trong trường hợp bạn đã bắt đầu một số quy trình nền ( &ở cuối lệnh hoặc Ctrl + z, bgbạn có thể làm cho chúng trở thành các quy trình nền trước bằng cách nhập fg.

Chương trình pscho phép bạn xem các chương trình hiện đang chạy. Ở đó bạn sẽ thấy bất kỳ 'trường hợp vẫn đang chạy'. Bạn có thể chấm dứt chúng bằng cách sử dụng kill -9 <PID>hoặc killall -9 <prog-name>.


Cảm ơn dcn. Tôi đã thực sự thử sử dụng killall. Tôi làm: ps -A | grep chương trình và sau đó killall -9 chương trình tên. Nhưng tôi nhận được một thông báo nói rằng không có chương trình thực thi nào đang chạy!

PS Để đăng xuất từ ​​một phiên ssh, chỉ cần đóng cửa sổ là đủ?

Cũng hữu ích là chạy kill -1như người dùng (không bao giờ root) sẽ giết tất cả quá trình thuộc sở hữu của người dùng đó.
Benjamin Bannier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.