Dari pertanyaan saya , jelas bahwa saya tidak dapat dengan mudah memutuskan fitur daemon. Saya telah membaca di artikel yang berbeda dan dari berbagai forum bahwa service --status-all
perintah dapat digunakan untuk membuat daftar semua daemon di sistem saya. Tetapi saya tidak berpikir bahwa perintah tersebut mencantumkan semua daemon karena NetworkManager
, daemon yang sedang berjalan di Ubuntu 14.04
sistem saya , tidak terdaftar oleh perintah. Apakah ada perintah untuk membuat daftar daemon yang sedang berjalan atau ada cara lain untuk menemukan daemon filesystem
itu sendiri?
32
network-manager
bukanNetworkManager
.anacron
yang disebutkan bukan daemon dalam skrip initnya.anacron
karena dikatakan/etc/init.d/anacron
bahwa itu bukan daemon. Tujuan saya adalah menulis sebuahC++
program untuk mendaftar semua daemon yang berjalan di sistem saya. Untuk itu saya perlu tahu file mana yang harus diurai untuk mendapatkan detailnya.service --status-all
itulah yang Anda butuhkan. Ubuntu tampaknya memperlakukan NetworkManager secara berbeda. Saya mendapatkan keduanyanetworking
dannetwork-manager
di outputservices --status-all
di Debian tetapi hanyanetworking
di Ubuntu. Saya pikir Anda perlu mendefinisikan apa yang sebenarnya Anda maksud dengan "daemon".Jawaban:
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 ofps
).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
: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.Namun, dua masalah muncul di sini:
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 ...
Sekarang,
ps
memiliki-C
saklar yang memungkinkan kita untuk memilih berdasarkan nama perintah. Kami baru saja mendapatkan daftar perintah kami, jadi mari menyuntikkannya keps
baris perintah. Perhatikan bahwa saya menggunakan--deselect
setelah itu untuk membalikkan pilihan saya.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 menampilkantty
setiap proses (dan baris perintah lengkapnya):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) ...... atau dengan menambahkan beberapa kolom informasi untuk Anda baca:
sumber
Saya menulis untuk sysv initd "lama", Anda harus memeriksa apakah itu bekerja pada distro Anda.
Setan yang baik memiliki skrip startup yang ditulis dengan baik di / etc / initd
Saat mengganti runlevel, bagaimana init mengetahui daemon yang berjalan?
Itu mencari nama mereka di direktori
Jadi kamu bisa
Untuk memindai semua proses: daftarkan setiap subdirektori di
Jika namanya digit, itu adalah pid dari proses yang berjalan.
Misalnya, status proses dengan pid 1234 adalah file ini
Buka dan dapatkan baris pertama, dimulai dengan "Nama:"
Lihat
(maaf untuk pemformatan yang tidak menyenangkan, saya menulis dari ponsel saya ...)
sumber