Câu trả lời:
Nếu kernel giết một tiến trình (vì hệ thống hết bộ nhớ), sẽ có một thông báo nhật ký kernel. Đăng nhập /var/log/kern.log
(trên Debian / Ubuntu, các bản phân phối khác có thể gửi nhật ký kernel đến một tệp khác, nhưng thường là /var/log
trong Linux).
Lưu ý rằng nếu trình diệt OOM (kẻ giết người hết bộ nhớ) được kích hoạt, điều đó có nghĩa là bạn không có đủ bộ nhớ ảo. Thêm nhiều trao đổi (hoặc có thể nhiều RAM hơn).
Một số sự cố quá trình cũng được ghi lại trong nhật ký kernel (ví dụ: lỗi phân đoạn).
Nếu các quy trình được bắt đầu từ cron, bạn sẽ có một thư có thông báo lỗi. Nếu các quy trình được bắt đầu từ một vỏ trong một thiết bị đầu cuối, hãy kiểm tra các lỗi trong thiết bị đầu cuối đó. Chạy quá trình screen
để xem thiết bị đầu cuối một lần nữa vào buổi sáng. Điều này có thể không giúp ích gì nếu kẻ giết người OOM kích hoạt, bởi vì nó cũng có thể đã giết chết cron hoặc quá trình sàng lọc; nhưng nếu bạn gặp phải kẻ giết người OOM, đó là vấn đề bạn cần khắc phục.
Quy trình kế toán có thể giúp đỡ ở đây.
Tóm lại:
apt-get install acct
Sau đó thử các lệnh như:
lastcomm
sa
hoặc trên Ubuntu:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
Xem:
CẬP NHẬT
Kỳ lạ thay, pacct
tập tin có thông tin về trạng thái thoát, nhưng dường như lastcomm
không sa
in nó.
Theo như tôi thấy, bạn phải viết chương trình C của riêng mình để truy cập thông tin.
CẬP NHẬT 2
Đây là phiên bản in mã thoát.
Hai trường cuối cùng là "S" cho tín hiệu và "E" cho thoát, theo sau là số tín hiệu hoặc trạng thái thoát.
Vì vậy, trong trường hợp của bạn, có lẽ bạn đang tìm kiếm "S 15" có nghĩa là nó có SIGTERM.
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15
So với "E 0" có nghĩa là quá trình đã thoát mà không có lỗi.
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
Chỉ được thử nghiệm tối thiểu.
dịch vụ sudo --status-all
Lệnh này sẽ cho bạn biết các dịch vụ hiện đang chạy là gì và không được bắt đầu hoặc dừng ..
/var/log/kern.log
?