1 votes

Sortie inattendue de `lsof -a`

Ma sortie de commande lsof est correcte pendant que l'application que je suis avec lsof -a est en cours d'exécution. Dès que je quitte cette application, l'appel lsof -a affiche des résultats pour chaque processus ayant une connexion ÉTABLIE.

lsof -lnPO -i -sTCP:ESTABLABLIE -a -p "$(pgrep -d, qbittorrent)" +c0

En fermant qbittorrent, il affiche ensuite toutes les connexions qui sont "ÉTABLIES".

Je veux des résultats pour les connexions qbittorrent ÉTABLIES et lorsqu'il n'y en a pas, aucune connexion.

Je affiche cette sortie via GeekTool sur le bureau. Il s'exécute en tant que script shell.

nice -n 9 /Users/john/ShellScripts/GeekTool/qBT-Activity.sh

3voto

nohillside Points 82672

Si pgrep ne trouve pas de correspondance, il renvoie une chaîne vide qui déclenche apparemment lsof pour renvoyer toutes les connexions établies.

En Bash, essayez

lsof -lnPO -i -sTCP:ESTABLISHED -a \
    -p "$(p=$(pgrep -d, qbittorrent); echo ${p:-9999999999999999})" \
    +c0

au lieu de (qui substitue un "pid" peu probable si aucun processus qbittorrent n'est en cours d'exécution).

0voto

John Points 693

@nohillside Merci pour votre solution! J'ai trouvé une méthode en testant le code de sortie. Je ne sais pas laquelle est plus "efficace".

Maintenant j'utilise /usr/bin/pgrep et non pas /usr/local/bin/pgrep

my_func() {
if /usr/bin/pgrep -q qbittorrent
then
  lsof -lnPO -a -i -sTCP:ESTABLISHED -a -p "$(/usr/bin/pgrep qbittorrent)" +c0
fi
}

L'opposé (test pour un code de sortie de 1)

my_func() {
if ! /usr/bin/pgrep -q qbittorrent
then
  return
else
  lsof -lnPO -a -i -sTCP:ESTABLISHED -a -p "$(/usr/bin/pgrep qbittorrent)" +c0
fi
}

-q drapeau supprime stdout, mais seulement dans la version de pgrep installée sur macOS et malheureusement pas dans la version proctools de pgrep

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X