Gagasan daemon melekat pada proses , bukan file . Untuk alasan ini, tidak ada gunanya "mencari daemon di sistem berkas". Hanya untuk membuat gagasan sedikit lebih jelas: program adalah file yang dapat dieksekusi (terlihat pada output dari ls
); sebuah proses adalah turunan dari program itu (terlihat dalam output of ps
).
Sekarang, jika kita menggunakan informasi yang saya berikan dalam jawaban saya , kita dapat menemukan daemon yang sedang berjalan dengan mencari proses yang berjalan tanpa terminal pengendali yang melekat padanya . Ini dapat dilakukan dengan cukup mudah dengan ps
:
$ ps -eo 'tty,pid,comm' | grep ^?
Kolom tty
keluaran berisi "?" ketika proses tidak memiliki terminal pengendali.
Masalah besar di sini muncul ketika sistem Anda menjalankan lingkungan grafis. Karena program GUI (yaitu Chromium) tidak terpasang ke terminal, mereka juga muncul di output. Pada sistem standar, di mana root tidak menjalankan program grafis, Anda bisa membatasi daftar sebelumnya untuk proses root. Ini dapat dicapai menggunakan ps
' -U
switch.
$ ps -U0 -o 'tty,pid,comm' | grep ^?
Namun, dua masalah muncul di sini:
- Jika root menjalankan program grafis, mereka akan muncul.
- Daemon yang berjalan tanpa hak root tidak. Perhatikan bahwa daemon yang dimulai saat boot biasanya berjalan sebagai root.
Pada dasarnya, kami ingin menampilkan semua program tanpa terminal pengendali, tetapi bukan program GUI . Untungnya bagi kita, ada program untuk proses daftar GUI: xlsclients
! Jawaban dari slm ini memberi tahu kami cara menggunakannya untuk mendaftar semua program GUI, tetapi kami harus membaliknya, karena kami ingin mengecualikannya. Ini dapat dilakukan dengan menggunakan --deselect
sakelar.
Pertama, kami akan membuat daftar semua program GUI yang kami jalankan prosesnya. Dari jawaban yang baru saja saya tautkan, ini dilakukan menggunakan ...
$ xlsclients | cut -d' ' -f3 | paste - -s -d ','
Sekarang, ps
memiliki -C
saklar yang memungkinkan kita untuk memilih berdasarkan nama perintah. Kami baru saja mendapatkan daftar perintah kami, jadi mari menyuntikkannya ke ps
baris perintah. Perhatikan bahwa saya menggunakan --deselect
setelah itu untuk membalikkan pilihan saya.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect
Sekarang, kami memiliki daftar semua proses non-GUI. Jangan lupakan aturan "tanpa TTY kami". Untuk ini, saya akan menambahkan -o tty,args
ke baris sebelumnya untuk menampilkan tty
setiap proses (dan baris perintah lengkapnya):
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
Final grep
menangkap semua baris yang dimulai dengan "?", Yaitu, semua proses tanpa tty kontrol. Dan begitulah! Baris terakhir ini memberi Anda semua proses non-GUI berjalan tanpa terminal pengendali. Perhatikan bahwa Anda masih bisa memperbaikinya, misalnya, dengan mengecualikan utas kernel (yang bukan proses) ...
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?
... atau dengan menambahkan beberapa kolom informasi untuk Anda baca:
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?
network-manager
bukanNetworkManager
.