D'après ma question , il était clair que je ne peux pas facilement décider des fonctionnalités d'un démon. J'ai lu dans différents articles et sur différents forums que la service --status-all
commande peut être utilisée pour répertorier tous les démons de mon système. Mais je ne pense pas que la commande répertorie tous les démons car NetworkManager
, un démon qui s'exécute actuellement sur mon Ubuntu 14.04
système, n'est pas répertorié par la commande. Existe-t-il une commande pour répertorier les démons en cours d'exécution ou bien existe-t-il un moyen de trouver les démons à partir de filesystem
lui-même?
32
network-manager
pasNetworkManager
.anacron
qui n'est pas mentionné comme un démon dans son script d'initialisation.anacron
parce qu'il a été dit/etc/init.d/anacron
que ce n'est pas un démon. Mon objectif est d'écrire unC++
programme pour lister tous les démons en cours d'exécution sur mon système. Pour cela, j'ai besoin de savoir quels fichiers analyser pour obtenir les détails.service --status-all
c'est ce dont vous avez besoin. Ubuntu semble traiter NetworkManager différemment. J'obtiens à la foisnetworking
etnetwork-manager
dans la sortie deservices --status-all
sur Debian mais uniquementnetworking
sur Ubuntu. Je pense que vous devez définir ce que vous entendez exactement par «démon».Réponses:
La notion de démon est attachée aux processus , pas aux fichiers . Pour cette raison, cela n'a aucun sens de "trouver des démons sur le système de fichiers". Juste pour rendre la notion un peu plus claire: un programme est un fichier exécutable (visible dans la sortie de
ls
); un processus est une instance de ce programme (visible dans la sortie deps
).Maintenant, si nous utilisons les informations que j'ai fournies dans ma réponse , nous pourrions trouver des démons en cours d'exécution en recherchant des processus qui s'exécutent sans qu'un terminal de contrôle ne leur soit attaché . Cela peut être fait assez facilement avec
ps
:Le
tty
champ de sortie contient "?" lorsque le processus n'a pas de terminal de contrôle.Le gros problème vient ici lorsque votre système exécute un environnement graphique. Étant donné que les programmes GUI (c'est-à-dire Chromium) ne sont pas connectés à un terminal, ils apparaissent également dans la sortie. Sur un système standard, où root n'exécute pas de programmes graphiques, vous pouvez simplement restreindre la liste précédente aux processus de root. Ceci peut être réalisé en utilisant
ps
'-U
switch.Pourtant, deux problèmes se posent ici:
Fondamentalement, nous aimerions afficher tous les programmes sans terminal de contrôle, mais pas les programmes GUI . Heureusement pour nous, il y a un programme de processus GUI liste:
xlsclients
! Cette réponse de slm nous indique comment l'utiliser pour répertorier tous les programmes GUI, mais nous devrons l'inverser, car nous voulons les exclure. Cela peut être fait en utilisant le--deselect
commutateur.Tout d'abord, nous allons créer une liste de tous les programmes GUI pour lesquels nous avons des processus en cours d'exécution. D'après la réponse que je viens de relier, cela se fait en utilisant ...
Maintenant,
ps
a un-C
commutateur qui nous permet de sélectionner par nom de commande. Nous venons de recevoir notre liste de commandes, alors injectons-la dans laps
ligne de commande. Notez que j'utilise--deselect
ensuite pour inverser ma sélection.Maintenant, nous avons une liste de tous les processus non GUI. N'oublions pas notre règle «aucun ATS attaché». Pour cela, je vais ajouter
-o tty,args
à la ligne précédente afin de sortir letty
de chaque processus (et sa ligne de commande complète):La finale
grep
capture toutes les lignes commençant par "?", C'est-à-dire tous les processus sans tty de contrôle. Et voilà! Cette dernière ligne vous donne tous les processus non-GUI s'exécutant sans terminal de contrôle. Notez que vous pouvez toujours l'améliorer, par exemple, en excluant les threads du noyau (qui ne sont pas des processus) ...... ou en ajoutant quelques colonnes d'informations à lire:
la source
J'ai écrit pour le "vieux" initd sysv, vous devez vérifier s'il fonctionne sur votre distribution.
Les bons démons ont des scripts de démarrage bien écrits dans / etc / initd
Lors de la modification du niveau d'exécution, comment init connaît-il les démons en cours d'exécution?
Il recherche leurs noms dans le répertoire
Afin que vous puissiez
Pour analyser tous les processus: répertoriez tous les sous-répertoires
Si son nom est des chiffres, c'est le pid d'un processus en cours.
Par exemple, l'état du processus avec le pid 1234 est ce fichier
Ouvrez-le et obtenez la première ligne, commence par "Nom:"
Voir
(désolé pour le formatage désagréable, j'écris depuis mon téléphone portable ...)
la source