2011-10-27 12 views
5

Đây là câu hỏi phỏng vấn.Làm thế nào để tìm lý do cho một quá trình chết mà không cần đăng nhập tập tin trên Unix?

Nhà phát triển đã bắt đầu một quy trình. Nhưng khi một khách hàng muốn sử dụng quy trình, ông đã tìm thấy quy trình không chạy. Nhà phát triển đã đăng nhập và thấy rằng quá trình này đã chết. Làm cách nào để nhà phát triển biết điều gì đã xảy ra?

Theo dõi: quy trình đang chạy có nghĩa vụ ghi nhật ký vào tệp. Nhưng không có nhật ký nào trong tệp. Làm cách nào để nhà phát triển có thể tìm ra những gì đang xảy ra trong quá trình này?

Tôi nghĩ: Nếu chương trình có thể được chạy lại, tôi sẽ sử dụng gdb để theo dõi quá trình. Nếu không, hãy kiểm tra tệp đầu ra từ quá trình (chương trình ứng dụng). hoặc thêm bản in vào mã.

Nhưng, có cách nào khác để làm điều đó bằng cách giới thiệu một số thông tin được tạo bởi hệ điều hành không?

+0

Điều gì về 'lõi dump' ??? –

+0

Bỏ phiếu để đóng: Bạn đã đưa ra một giải pháp và sẽ không có câu trả lời đúng cho câu hỏi "có cách nào khác để làm điều đó không?" Nó chỉ có thể kích động thảo luận mở rộng. –

Trả lời

-1

... sử dụng một trình gỡ lỗi như gdb ...

+0

OP đã đề cập đến điều này. Bạn có thể đưa ra lý do là tại sao đây là câu trả lời duy nhất? –

+0

Lần đầu tiên tôi có một câu trả lời khác, nhưng sau đó nhận ra rằng OP đã trả lời câu hỏi của chính mình ... và tôi đồng ý với đánh giá của mình – Tilo

4

đang có những cách khác để làm điều đó bằng cách giới thiệu một số thông tin được tạo ra bởi OS?

core dump là một tùy chọn.

3

Đôi khi các chương trình không tạo ra các bãi lõi. Trong trường hợp này, việc biết mã thoát của phần mềm của bạn có thể hữu ích.

Vì vậy, bạn có thể sử dụng tập lệnh này bên dưới để khởi động phần mềm và đăng xuất trạng thái thoát của nó để tìm lý do thoát.

Ví dụ:

#!/bin/bash 
./myprogram 

#get exit code 
exitvalue=$? 

#log exit code value to /var/log/messages 
logger -s "exit code of my program is " $exitvalue 
5

Nếu bạn có không gian đĩa và sức mạnh của CPU rảnh rỗi, bạn có thể để strace theo chương trình để bắt trình tự dẫn đến thoát.

Một nguyên nhân có thể xảy ra nếu chương trình đã chết mà không để lại bất kỳ dấu vết nào là Out-Of-Memory (OOM) killer. Điều này sẽ để lại một tin nhắn trong nhật ký hạt nhân nếu nó giết chết quá trình của bạn.

Từ cùng một câu trả lời, process accounting có thể được sửa đổi để cung cấp một số manh mối bằng cách cho bạn biết mã thoát cùng với thời gian thoát.

Các vấn đề liên quan