GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver le processus avec un maximum de descripteurs de fichiers ?

Quel est le problème avec ce for boucle? J'essaie de trouver quel processus a le nombre maximum de descripteurs de fichiers. La première commande dans le for boucle ps aux | awk '{print $2}' imprime uniquement les ID de processus. Je connais la première erreur lsof: illegal process ID: PID est là parce que la 1ère ligne de la sortie est PID , mais la boucle ne devrait-elle pas fonctionner correctement pour le reste des lignes ?

[[email protected] ~]# for i in `ps aux | awk '{print $2}'` ; do `lsof -p $i | wc -l` ; done
lsof: illegal process ID: PID
lsof 4.82
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
-bash: 0: command not found
-bash: 22: command not found
-bash: 4: command not found
-bash: 4: command not found
-bash: 4: command not found
-bash: 4: command not found
^C
[[email protected] ~]#

Pourquoi exécute-t-il la sortie de wc -l au lieu de revenir à la boucle ?

Ou existe-t-il un autre moyen de trouver le processus avec un maximum de descripteurs de fichiers ?

Réponse acceptée :

Le problème est les backticks dans votre do ... done rubrique.

Lors de l'écriture d'un script shell, vous n'avez pas besoin d'encapsuler des blocs (if; then ... fi , while; do ... done , etc) en backticks. Cela entraîne l'évaluation par le shell du contenu des backticks, puis l'exécution de ce contenu. Ainsi, les backticks renvoient un nombre (le nombre de fichiers ouverts), puis tentent d'exécuter ce nombre, ce qui entraîne une command not found .

Ainsi vous voulez :

for i in `ps aux | awk '{print $2}'` ; do lsof -p $i | wc -l ; done

Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Comment auditer les autorisations avec la commande find

  3. Comment trouver des fichiers en double sous Linux ? L'aide est ici avec la commande fdupes !

  4. Comment puis-je trouver la taille de pile maximale ?

  5. Comment trouver le fichier .pid pour un processus donné

Comment utiliser la commande md5sum sous Linux

Comment utiliser la commande touch sous Linux

Comment utiliser la commande Linux head

Comment utiliser la commande Linux diff

Comment rechercher des fichiers avec la commande fd sous Linux

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find