私の質問からデーモンのプロセス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プロセスを一覧表示できるプログラムがありますxlsclients
。slmの答えすべての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などに基づいています)このコマンドは、systemctl
systemdによって制御されているすべてを処理するために使用されます。したがって、サービスのリストを取得するには、次のようにします。
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