web-dev-qa-db-ja.com

Linux:デーモンプロセスとゾンビプロセスのリストを見つける方法

Googleで確認しようとしましたが、実際の質問に関連する情報はあまり見つかりませんでした。

ゾンビプロセスとデーモンプロセスの統合リストを取得するにはどうすればよいですか?異なるオペレーティングシステムでそれを行う方法Linux? AIX?ウィンドウズ?

PIDに基づいて、プロセスの種類を特定できないと確信しています。ターミナルを介して実行することも、助けにはならないかもしれません。

16
kris123456

これを試してください。

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

上記のコマンドでは、Linuxのすべての既存のプロセスから、デーモンのプロパティを使用してそれらを除外しました。

デーモンの親は常にInitなので、ppid 1を確認してください。通常、デーモンはどの端末にも関連付けられていないため、ttyの下に「?」があります。デーモンのプロセスIDとプロセスグループIDは通常同じです。デーモンのセッションIDはプロセスIDと同じです。

16
madala

Linuxの場合GNU ps:

[

$ ps --version

procps-ng version 3.3.3

]

ゾンビ:

ps -lA | grep '^. Z'

すべてのゾンビを取得します(パラメーターは小文字の「L」、つまり「l」の後に「A」が続くことに注意してください)。

デーモン:

@Barmarが言ったように、特定のデーモンを取得する方法はありませんが、プロセスがデーモンであるという手がかりは、どのTTYデバイスにも関連付けられていないことです。 'ps -Al'出力の12列目はTTYです。 4番目はPID、14番目はプロセス名です。したがって:

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

おそらくデーモンであるプロセスを取得します。保証されていません! :)

10
kaiwan

デーモンは、initプロセスによって開始されます。つまり、PPIDは1です。

したがって:

ps -ef | awk '$3 == 1'
3
Ann B

ゾンビとデーモンプロセスのリストを取得するには、疑似文字のdevドライバーを作成します。そこで、task_structをナビゲートして状態を探す必要があります

1
user2623122

デーモンと「古い」sysv initdについて書いたので、ディストリビューションで動作しているかどうかを確認する必要があります。

良い悪魔は/ etc/initdに起動スクリプトをよく書いています

ランレベルを変更するとき、initは実行中のデーモンをどのように認識しますか?

ディレクトリで名前を探します

/ var/lock/subsys

だからあなたはできる

そこから名前リストを取得する

実行中のすべてのプロセスをスキャンし、名前がリスト内にあるかどうかを確認します:bingo!

すべてのプロセスをスキャンするには:すべてのサブディレクトリをリストします

/ proc

名前が数字の場合、実行中のプロセスのPIDです。

たとえば、pid 1234のプロセスのステータスはこのファイルです

/ proc/1234/status

それを開いて最初の行を取得し、「Name:」で始まります

見る

http://man7.org/linux/man-pages/man5/proc.5.html

https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/

(厄介なフォーマットについては申し訳ありませんが、携帯電話から書いています...)

0
Massimo