Googleで確認しようとしましたが、実際の質問に関連する情報はあまり見つかりませんでした。
ゾンビプロセスとデーモンプロセスの統合リストを取得するにはどうすればよいですか?異なるオペレーティングシステムでそれを行う方法Linux? AIX?ウィンドウズ?
PIDに基づいて、プロセスの種類を特定できないと確信しています。ターミナルを介して実行することも、助けにはならないかもしれません。
これを試してください。
ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3'
上記のコマンドでは、Linuxのすべての既存のプロセスから、デーモンのプロパティを使用してそれらを除外しました。
デーモンの親は常にInitなので、ppid 1を確認してください。通常、デーモンはどの端末にも関連付けられていないため、ttyの下に「?」があります。デーモンのプロセスIDとプロセスグループIDは通常同じです。デーモンのセッションIDはプロセスIDと同じです。
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}'
おそらくデーモンであるプロセスを取得します。保証されていません! :)
デーモンは、initプロセスによって開始されます。つまり、PPIDは1です。
したがって:
ps -ef | awk '$3 == 1'
ゾンビとデーモンプロセスのリストを取得するには、疑似文字のdevドライバーを作成します。そこで、task_structをナビゲートして状態を探す必要があります
デーモンと「古い」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/
(厄介なフォーマットについては申し訳ありませんが、携帯電話から書いています...)