実行中のすべてのデーモンを一覧表示するには?

実行中のすべてのデーモンを一覧表示するには?

私の質問からデーモンのプロセスIDとセッションIDが異なる可能性がありますか?、デーモンが何をしているのか簡単に判断できないことは明らかです。私はこのservice --status-allコマンドを使用して、私のシステム上のすべてのデーモンを一覧表示できるいくつかの記事と複数のフォーラムを読みました。しかし、コマンドはNetworkManager私のシステムで現在実行されているデーモンをリストしていないので、コマンドはすべてのデーモンをリストしているとは思いません。Ubuntu 14.04実行中のデーモンを一覧表示するコマンドがありますか、それともfilesystemデーモン自体でデーモンを見つける方法がありますか?

答え1

コンセプト悪魔添付プロセス、いいえ文書。したがって、「ファイルシステムでデーモンを探す」という意味はありません。概念をより明確に説明すると、プログラムは実行可能ファイル(出力に表示されます)、lsプロセスはそのプログラムのインスタンス(出力に表示されますps)です。

今私が提供した情報を活用する私の答え、実行中のデーモンプロセスを次のように見つけることができます。制御端末を接続せずに実行中のプロセスを検索する。これは次の方法で簡単に実行できますps

$ ps -eo 'tty,pid,comm' | grep ^?

ttyプロセスに制御端末がない場合、出力フィールドに「?」が含まれます。

システムがグラフィカル環境を実行すると大きな問題が発生します。 GUIプログラム(Chromiumなど)は端末に接続されていないため、出力にも表示されます。標準システムでは、ルートはグラフィックプログラムを実行せず、単純に古いリストをルートのプロセスに制限することができます。これはps'switch'を使用して達成できます-U

$ ps -U0 -o 'tty,pid,comm' | grep ^?

しかし、ここでは2つの問題が発生します。

  • ルートがグラフィックプログラムを実行している場合、そのプログラムが表示されます。
  • root権限なしで実行されるデーモンはそうではありません。起動時に起動されたデーモンは通常 root として実行されます。

基本的に私たちは欲しい端末を制御しないすべてのプログラムを表示しますが、GUIプログラムは表示しません。。幸いなことに、GUIプロセスを一覧表示できるプログラムがありますxlsclientsslmの答えすべてのGUIプログラムをリストするためにこれを使用する方法を教えてくれますが、それを除外したいので、これを逆にする必要があります。これはスイッチを使用して行うことができます--deselect

まず、実行中のプロセスを含むすべてのGUIプログラムのリストを作成します。接続したばかりの答えで見ると、これは次のようになります。

$ xlsclients | cut -d' ' -f3 | paste - -s -d ','

コマンド名で選択できるスイッチpsがあります。-C私はコマンドリストを得たので、それをpsコマンドラインに挿入しましょう。その後、これを使用して--deselect選択を反転します。

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect

これで、GUIではなくすべてのプロセスのリストがあります。 「TTY接続なし」ルールを忘れないでください。そのために、各プロセス(およびコマンドライン全体)が出力さ-o tty,argsれるように前の行に追加します。tty

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?

最後は、grep「?」で始まるすべての行、つまり制御ttyを持たないすべてのプロセスをキャプチャします。それではそうします!最後の行は、制御端末なしで実行されるすべての非GUIプロセスを提供します。たとえば、次のように改善できます。カーネルスレッドの除外(これはプロセスではありません)...

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?

...または読みやすい情報をいくつか追加します。

$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?

答え2

最新システムを運営しながらシステム(Debian、Fedora、RedHat / CentOsなどに基づいています)このコマンドは、systemctlsystemdによって制御されているすべてを処理するために使用されます。したがって、サービスのリストを取得するには、次のようにします。

systemctl | grep daemon

2022/10 編集: より具体的には、systemdカーネルで処理されるものがたくさんあります。実行してみると$ sudo systemctl -t helpわかります。

サービスを確認するには、$ sudo systemctl --type=service目的のサービスを実行してgrepします。

答え3

私は「古い」sysv initd用に書いています。ディストリビューションで実行されていることを確認する必要があります。

良い幽霊は/etc/initdに起動スクリプトを書いた。

ランレベルを変更すると、initはどのデーモンが実行されているかをどのように知ることができますか?

ディレクトリ内の名前を探します。

/var/lock/サブシステム

だからあなたはできます

そこからリストを入手してください

実行中のすべてのプロセスを確認し、名前がリストにあることを確認してください。ビンゴ!

すべてのプロセスを検索するには、次の各サブディレクトリを一覧表示します。

/プロセス

名前が数値の場合は、実行中のプロセスのpidです。

たとえば、pidが1234のプロセスの状態はこのファイルです。

/proc/1234/状態

それを開き、「名前:」で始まる最初の行を取得します。

バラより

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

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

(申し訳ありませんが、フォーマットがあまり良くないので携帯で書いています...)

答え4

現在実行されているすべてのサービス(デーモンとも呼ばれる)を一覧表示するには、systemd次のコマンドを実行します。

sudo systemctl --type=service --state=active

関連情報