Có cách nào để một tiến trình con trong Python phát hiện xem quá trình cha mẹ đã chết chưa?Quá trình con phát hiện quá trình cha mẹ 'cái chết trong Python
Trả lời
Bạn có thể lấy đi bằng cách đọc ID quá trình cha mẹ của bạn rất sớm trong quá trình của bạn, và sau đó kiểm tra, nhưng tất nhiên đó là dễ bị điều kiện chủng tộc. Cha mẹ đã sinh sản có thể đã chết ngay lập tức, và ngay cả trước khi quá trình của bạn đã thực hiện lệnh đầu tiên của nó.
Trừ khi bạn có cách xác minh xem một PID cụ thể có liên quan đến phụ huynh "được mong đợi" hay không, tôi nghĩ thật khó để thực hiện một cách đáng tin cậy.
Nếu quy trình Python của bạn đang chạy dưới Linux và cuộc gọi hệ thống prctl()
được hiển thị, bạn có thể sử dụng câu trả lời here.
Điều này có thể gây ra tín hiệu được gửi tới trẻ khi quá trình cha mẹ chết.
Cách đáng tin cậy duy nhất tôi biết là tạo một đường ống đặc biệt cho mục đích này. Đứa trẻ sẽ phải liên tục cố gắng đọc từ ống, tốt nhất là trong thời trang không bị chặn hoặc sử dụng lựa chọn. Nó sẽ nhận được một lỗi khi các đường ống không tồn tại nữa (có lẽ vì cái chết của cha mẹ).
Giả sử cha mẹ còn sống khi bạn bắt đầu để làm điều này, bạn có thể kiểm tra xem nó vẫn còn sống trong một vòng lặp bận rộn như vậy, bằng cách sử dụng psutil:
import psutil, os, time
me = psutil.Process(os.getpid())
while 1:
if me.parent is not None:
# still alive
time.sleep(0.1)
continue
else:
print "my parent is gone"
Không rất đẹp nhưng ...
- 1. Android: Quá trình con (logcat) tiếp tục chạy sau khi quá trình cha mẹ (ứng dụng) chết
- 2. Quy trình con chấm dứt khi quá trình cha mẹ chấm dứt trong C#
- 3. Nhiều quá trình con
- 4. nohup cho quá trình con trong unix
- 5. Theo dõi cái chết của một tiến trình con
- 6. Bắt quá trình node.js chết?
- 7. fork() quy trình con và cha mẹ
- 8. Giết chết một quá trình tạo ra với subprocess.Popen Python()
- 9. thay đổi phụ huynh của quá trình
- 10. Bỏ qua tín hiệu SIGINT trong quá trình con
- 11. C#: quá trình đóng trên quá trình của ứng dụng 'giết chết (với taskman)
- 12. Quá trình con nhận được SIGINT
- 13. GDB backtrace về quá trình con
- 14. Tại sao địa chỉ của biến của quá trình đứa trẻ và quá trình cha mẹ là giống
- 15. Làm thế nào để chuyển hướng quá trình con stdout/stderr cho quá trình stdout/stderr chính trong Java?
- 16. Trình xây dựng cha mẹ gọi chuỗi trong python
- 17. Cách nhận các biến được chia sẻ giữa quá trình con và cha mẹ khi sử dụng nĩa trong perl
- 18. Quá trình DeadLock Cái nào khóa trước?
- 19. Hệ điều hành bắt đầu quá trình giết khi quá trình python đa luồng chạy
- 20. Android - giữ cho dịch vụ còn sống ngay cả khi quá trình cha mẹ bị giết
- 21. làm thế nào để giết chết quá trình uWSGI
- 22. quá trình và Kill tiểu trình trong Ruby trên Windows
- 23. Giết một quá trình python
- 24. Phát hiện số quá trình đang chạy với cùng tên
- 25. Làm thế nào tôi có thể vượt qua một ổ cắm từ quá trình cha mẹ đến con
- 26. Quá trình Python sẽ không gọi atexit
- 27. ĐẠT ĐƯỢC ĐẠT: Cha mẹ: quá trình con đã thoát với trạng thái 3221225477 - Khởi động lại
- 28. thời gian thực hiện bởi quá trình con chia hai
- 29. linux: lập trình có được pid cha của một quá trình khác?
- 30. Emacs, giết chết quá trình nội bộ, lệnh nào?