Làm cách nào để giết một tiến trình trong Erlang chỉ biết tên mô-đun được sử dụng để khởi động nó?Làm cách nào để giết một quá trình trong Erlang chỉ biết tên mô-đun được sử dụng để khởi động nó?
Trả lời
Không có cách nào để làm điều đó.
Đặt cược tốt nhất của bạn là suy đoán dựa trên tên đã đăng ký và/hoặc cuộc gọi ban đầu của các quy trình của bạn.
trong trường hợp bất kỳ ai đang tìm kiếm API để nhận được pid theo tên đã đăng ký, hãy gọi 'whereis (RegisteredName)' –
Nếu đó là để gỡ lỗi đơn giản, bạn có thể chạy pman: start() và chỉ cần tìm quy trình (nhấp đúp vào mục nhập để xem chi tiết như cuộc gọi ban đầu). Sau đó bạn có thể giết nó trực tiếp từ người chơi.
Nếu không, bạn có thể sử dụng erlang: processes() để liệt kê tất cả các tiến trình trong hệ thống (khủng khiếp, tôi biết), và chạy erlang: process_info (Pid, initial_call) trên mỗi chúng để tìm đúng quy trình. Một khi bạn đã làm điều đó, chỉ cần sử dụng exit (Pid, kill).
Bạn vẫn có thể tìm thấy quy trình thông qua các phương tiện khác, ngay cả khi nó chưa được đăng ký. Ví dụ, bạn có thể có một cái nhìn với một màn hình quá trình như pman (pman: start()) và xem nếu bạn tìm thấy nó ở đó. pman cho phép bạn lọc nhiều tiêu chí, điều này có thể đưa bạn đến đúng quy trình. Hoặc bạn có thể khởi động trình gỡ rối, cài đặt điểm ngắt vào mô-đun và lần sau quá trình thực hiện điều gì đó, nó sẽ bị gián đoạn, trình gỡ lỗi sẽ bật lên cửa sổ và trong thanh tiêu đề bạn có thể đọc PID của quá trình đã bị gián đoạn.
Khi bạn có PID, bạn có thể sử dụng pid (A, B, C). để giả mạo một đối tượng PID trên vỏ từ nó, và sử dụng nó để giết tiến trình.
Nếu mô-đun đã biết đã bắt đầu nhiều quy trình, làm thế nào để bạn biết bạn muốn giết cái nào? – Paralife