2013-08-01 39 views
14

Tôi đã thử kiểm tra trên Google, nhưng tôi không thể tìm thấy nhiều thông tin liên quan đến câu hỏi thực tế.Linux: Cách tìm danh sách quy trình daemon và quy trình zombie

Làm cách nào để có danh sách các quy trình và quy trình xử lý daemon hợp nhất? Làm cách nào để thực hiện trên các hệ điều hành khác nhau. Linux? AIX? Các cửa sổ?

Tôi chắc chắn rằng, dựa trên PID, chúng tôi không thể xác định loại quy trình. Chạy qua một thiết bị đầu cuối có thể không giúp được gì.

+0

Không có cách nào để xác định quy trình daemon, nhưng zombie có 'Z' trong cột trạng thái của' ps'. – Barmar

Trả lời

1

Để có được danh sách các Zombie và daemon quá trình chỉ cần viết một trình điều khiển dev nhân vật psudo, nơi bạn nên hướng trough task_struct và tìm kiếm trạng thái

+0

Đúng, nhưng: (a) nỗ lực nhiều hơn (b) bạn vẫn sẽ không biết đó là một daemon cho chắc chắn – kaiwan

+0

Bạn có vui lòng eloberate về "viết một trình điều khiển nhân vật giả pseudo"? Ngoài ra, bằng cách điều hướng thông qua task_struct, có thể xác định một quy trình daemon một cách chính xác. Có nghĩa là, chắc chắn. Không có sự không khớp. – kris123456

10

Với GNU ps trên Linux:

[

$ ps --version 

procps-ng version 3.3.3 

]

Zombies:

ps -lA | grep '^. Z' 

sẽ giúp bạn có được tất cả zombie (lưu ý rằng tham số là chữ thường 'L', tức là 'l' theo sau là 'A').

Daemons:

Như @Barmar nói không có cách nào để có được daemon chắc chắn, nhưng một đầu mối là một quá trình là một daemon là nó không liên quan đến bất kỳ thiết bị TTY. Cột thứ 12 của đầu ra 'ps -Al' là TTY; thứ 4 là PID, thứ 14 là tên tiến trình. Do đó:

ps -lA | awk '$12 == "?" {print $4, $14}' 

sẽ cho bạn các quy trình là có thể là daemon; không được bảo đảm! :)

2

Daemons được bắt đầu bởi tiến trình init, có nghĩa là họ có một PPID của 1.

Do đó:

ps -ef | awk '$3 == 1' 
+0

Nhưng điều này sẽ xuất ra những tiến trình không phải là daemon. Bởi vì, nếu một quá trình cha mẹ chết trước khi một đứa trẻ, con đó sau đó được parented bởi init(). –

14

Hãy thử này.

ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3' 

Trong lệnh trên, tôi đã sử dụng thuộc tính rất của daemon để lọc chúng ra khỏi tất cả các quy trình hiện có trong Linux.

Phụ huynh của daemon luôn là Init, vì vậy hãy kiểm tra ppid 1. Daemon thường không được liên kết với bất kỳ thiết bị đầu cuối nào, do đó chúng tôi có ‘?’ Dưới tty. Quá trình id và process-group-id của một daemon thường giống nhau Phiên id của một daemon giống như quá trình id.

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