デーモンの概念は、ファイルではなくプロセスに関連付けられています。このため、「ファイルシステム上のデーモンを見つける」ことには意味がありません。概念を少し明確にするために、プログラムは実行可能ファイル(の出力に表示されるls
)です。プロセスはそのプログラムのインスタンスです(の出力に表示されますps
)。
さて、回答で与えた情報を使用すると、制御端末が接続されていない状態で実行されるプロセスを検索することで、実行中のデーモンを見つけることができます。これは非常に簡単にできますps
:
$ ps -eo 'tty,pid,comm' | grep ^?
tty
出力フィールドが含まれています「?」プロセスに制御端末がない場合。
ここでの大きな問題は、システムがグラフィカル環境を実行するときに発生します。GUIプログラム(つまりChromium)は端末に接続されていないため、出力にも表示されます。rootがグラフィカルプログラムを実行しない標準システムでは、単に以前のリストをrootのプロセスに制限できます。これはps
' -U
スイッチを使用して実現できます。
$ ps -U0 -o 'tty,pid,comm' | grep ^?
ただし、ここでは2つの問題が発生します。
- 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 ^?
final 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 ^?
network-manager
であることに注意してくださいNetworkManager
。