Tôi thấy mình đã rất bối rối khi quay lại một số thay đổi mà tôi đã tìm thấy khi chuyển các tập lệnh Python từ Linux sang OS X ...
Trên Linux, nếu tập lệnh Python đã gọi os.system () và quá trình gọi bị hủy, quy trình được gọi sẽ bị hủy cùng một lúc.
Tuy nhiên, trên OS X, nếu tiến trình chính bị hủy, mọi thứ mà nó khởi chạy sẽ bị bỏ lại.
Có điều gì đó ở đâu đó trong OS X / Python nơi tôi có thể thay đổi hành vi này không?
Điều này gây ra sự cố trong trang trại kết xuất của chúng tôi, nơi các quy trình có thể bị hủy khỏi GUI quản lý, nhưng quy trình cấp cao nhất thực sự chỉ là một trình bao bọc, vì vậy, trong khi quản lý trang trại kết xuất có thể nghĩ rằng quy trình đã biến mất và máy được giải phóng đối với một nhiệm vụ khác, tác vụ chuyên sâu của bộ xử lý vẫn đang chạy, điều này có thể dẫn đến tắc nghẽn rất lớn.
Tôi biết rằng tôi có thể viết nhiều logic hơn để bắt tín hiệu tiêu diệt và truyền nó cho các tiến trình con, nhưng tôi đã hy vọng rằng nó có thể là thứ gì đó có thể được kích hoạt ở mức thấp hơn.
tcsh
(ick) đang bắt đầu quá trình trình bao bọc Python. Nó được thực hiện với exec
tiền tố lệnh hay chỉ là một lệnh thông thường trong tập lệnh? Về phía kill, bạn có thể sử dụng một cái gì đó như strace
(Linux) hoặc ktrace
+ kdump
(Mac OS X) để tìm hiểu làm thế nào tín hiệu được gửi (kill / killpg? Đối số PID âm?). Những điều này sẽ cung cấp manh mối cho các cuộc điều tra tiếp theo.