Çalışan tüm çalışanlar nasıl listelenir?


32

Benim soruma göre , bir daemonun özelliklerine kolayca karar veremediğim açıktı. Farklı makaleler ve farklı forumlardan okudum, bu service --status-allkomut benim sistemimdeki tüm programları listelemek için kullanılabiliyor. Ancak, komutun tüm arama listelerini listelediğini sanmıyorum, çünkü NetworkManagerşu anda Ubuntu 14.04sistemimde çalışan bir arka plan programı komut tarafından listelenmiyor. Çalışan bölümleri listelemek için bir komut var mı, yoksa bölümden filesystemkendisinden bölümleri bulmanın bir yolu var mı?


Listelenmediğinden emin misin? Nasıl kontrol ediyorsun Debian'ımda görebiliyorum. İsmin network-managerdeğil olduğuna dikkat edin NetworkManager.
terdon

Evet. Eminim. Ağ terimi ile ilgili hiçbir şey listelenmemiştir. Ayrıca anacroninit betiğinde bir daemon olmadığı belirtilen listeleri de listeliyor .
Jackzz

Anakron daemon olmamak, daha çok anlambilim meselesidir çünkü sürekli çalıştırılmaz. Hala normalde neye bahsettiğin bir hizmet olarak çalışıyor. Lütfen sorunuzu düzenleyin ve i) bize hangi Ubuntu'yu çalıştırdığınızı ve ii) "daemon" ile ne demek istediğinizi bize söyleyin. Buradaki nihai hedefiniz nedir?
terdon

Sanırım arka planda çalışan herhangi bir hizmet bir servistir. Bahsettim anacronçünkü bunun /etc/init.d/anacronbir servet olmadığı söylendi . Amacım, C++sistemimde çalışan tüm telefon numaralarını listelemek için bir program yazmak . Bunun için ayrıntıları almak için hangi dosyaların ayrıştırılacağını bilmem gerekiyor.
Jackzz

1
Eğer servetleri servis olarak tanımlarsanız, service --status-allihtiyacınız olan şey budur. Ubuntu, NetworkManager'a farklı davranıyor gibi görünüyor. Hem almak networkingve network-managerçıkışında services --status-allDebian üzerinde ama sadece networkingUbuntu üzerinde. "Daemon" ile tam olarak ne demek istediğinizi tanımlamanız gerektiğini düşünüyorum.
terdon

Yanıtlar:


52

Daemon kavramı, dosyalara değil süreçlere eklenir . Bu nedenle, "dosya sisteminde daemon bulma" anlamında bir anlam yoktur. Sadece kavramı biraz daha netleştirmek için: bir program çalıştırılabilir bir dosyadır (çıktısında görülebilir ); süreç, o programın bir örneğidir (çıktısında görülebilir ).lsps

Biz de verdi bu bilgileri kullanabilirsiniz Şimdi eğer benim cevap , biz tarafından çalışan cinleri bulabiliriz ekli kontrol terminal olmadan çalıştırmak süreçler ararken . Bu, oldukça kolay bir şekilde yapılabilir ps:

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

ttyÇıkış alanı içeriyor "?" İşlem kontrol terminali olmadığında.

Buradaki en büyük sorun sisteminiz grafiksel bir ortamda çalıştığında ortaya çıkar. GUI programları (yani Chromium) bir terminale bağlı olmadığından, çıktıda da görünürler. Kökün grafik programları çalıştırmadığı standart bir sistemde, önceki listeyi kök işlemleriyle sınırlandırabilirsiniz. Bu ps' -Uanahtar kullanılarak elde edilebilir .

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

Ancak, burada iki sorun ortaya çıkıyor:

  • Kök grafik programları çalışıyorsa, görüneceklerdir.
  • Kök ayrıcalıkları olmadan çalışan Daemons olmaz. Önyükleme sırasında başlayan kemanların genellikle kök olarak çalıştığını unutmayın.

Temel olarak, tüm programları kontrol terminali olmadan göstermek istiyoruz , ancak GUI programlarını göstermiyoruz . Neyse ki bizim için, liste GUI süreçlerine bir program vardır: xlsclients! Slm'in bu cevabı bize tüm GUI programlarını listelemek için nasıl kullanılacağımızı anlatıyor, fakat onları dışlamak istediğimizden tersine çevirmemiz gerekecek. Bu --deselectanahtar kullanılarak yapılabilir .

Öncelikle, üzerinde işlem yaptığımız tüm GUI programlarının bir listesini oluşturacağız. Yeni bağladığım cevaptan, bu ...

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

Şimdi, komut adına göre seçmemizi sağlayan psbir -Canahtara sahip. Komut listemizi yeni aldık, hadi pskomut satırına ekleyelim. --deselectSeçimimi tersine çevirmek için daha sonra kullandığımı unutmayın .

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

Şimdi, GUI dışı tüm işlemlerin bir listesine sahibiz. "TTY ekli değil" kuralımızı unutmayalım. Bunun için her bir işlemin (ve tüm komut satırının) -o tty,argsçıktısını almak için önceki satıra ekleyeceğim tty:

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

Son grep, "?" İle başlayan tüm satırları, yani kontrol eden bir tty olmadan tüm işlemleri yakalar. Ve işte burda! Bu son satır, kontrol terminali olmadan çalışan tüm GUI dışı işlemleri verir. Örneğin, (işlenmeyen) çekirdek iş parçacıklarını hariç tutarak hala geliştirebileceğinizi unutmayın ...

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

... ya da okumanız için birkaç bilgi sütunu ekleyerek:

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

linux, sanal dosya sistemi hakkında birçok bilgiyi tutar, procfs. bu yüzden "dosya sisteminde daemon bulmak" mümkün!
Massimo

0

Eski sysv initd için yazdım, dağıtımınız üzerinde çalışıp çalışmadığını kontrol etmeniz gerekiyor.

İyi iblisler / etc / initd'de başlangıç ​​komut dosyaları yazdılar

Çalışma seviyesini değiştirirken, init, çalışan şeytanları nasıl bilir?

Dizindeki isimlerini arar.

/ Var / lock / subsys

Böylece yapabilirsiniz

oradaki isimler listesini al

tüm çalışan işlemleri tarayın ve adın listede olup olmadığını kontrol edin: tombala!

Tüm işlemleri taramak için: içindeki her bir alt dizini listeleyin

/ proc

Adı basamak ise, çalışan bir sürecin pidesidir.

Örneğin, işlem 1234 olan işlemin durumu bu dosyadır

/ Proc / 1234 / statü

Aç ve ilk satırı al, "Ad:" ile başlar.

Görmek

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

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

(Kötü biçimlendirme için üzgünüm, cep telefonumdan yazıyorum ...)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.