GNU/Linux >> Tutoriels Linux >  >> Linux

ps :une méthode propre pour n'obtenir que les processus parents ?

/usr/bin/pgrep -o <process_name>

où '-o' est le plus ancien (le moins récemment lancé) des processus correspondants


Une autre solution (d'ici):

ps -ocommand= -p $PPID | awk -F/ '{print $NF}' | awk '{print $1}'

Après avoir discuté avec @netcoder des commentaires de sa réponse, il a utilisé une belle astuce :D
Utilisation de f le ps aura toujours le parent au-dessus, ce qui est génial.

Cela devrait fonctionner :

$ ps hf -opid -C <process> | awk '{ print $1; exit }'

comme je le mentionne dans les commentaires, cela renverra le pid d'un seul processus.

J'irais avec :

ps rf -opid,cmd -C <process-name> | awk '$2 !~ /^[|\\]/ { print $1 }'

c'est-à-dire :

  • liste les processus en cours d'exécution r (ou e si vous voulez tout)
  • avec le graphique parents/enfants f
  • affiche uniquement le pid et le nom de la commande -opid,cmd
  • uniquement pour le processus donné -C <process>

puis

  • si le 2ème champ - qui est la commande (-opid,cmd ) - ne commence pas par un \ ou | alors c'est un processus parent, donc imprimez le 1er champ - qui est le pid.

essai simple :

$ ps f -opid,cmd -Cchromium
  PID CMD
 2800 /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
 2803  \_ /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
 2899      \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
 2906      |   \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
 [  ... snip ... ]
 2861      \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
 2863          \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
 2794 /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
 2796  \_ /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
 3918  \_ /usr/lib/chromium/chromium --type=gpu-process --channel=2794.45.1891443837 --gpu-vendor-id=0x10de --gpu-device-id=0x0611 --gpu-driver-version -
25308  \_ [chromium] <defunct>
31932  \_ /usr/lib/chromium/chromium --type=plugin --plugin-path=/usr/lib/mozilla/plugins/libflashplayer.so --lang=en-US --channel=2794.1330.1990362572


$ ps f -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
PID
2800
2794

$ # also supressing the header of ps (top line 'PID') -- add 'h' to ps
$ ps hf -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
2800
2794

Linux
  1. /usr/bin Vs /usr/local/bin Sous Linux ?

  2. Bash =~ Regex et Https://regex101.com/?

  3. La différence entre /opt et /usr/local ?

  4. Comment activer un onglet particulier de Chrome via Bash ?

  5. Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

gcc - /usr/bin/ld erreur :impossible de trouver <library> dans /usr/local/lib bien que ldconfig le liste et le chemin ajouté à ld.so.conf

Pourquoi mettre des choses autres que /home sur une partition séparée ?

Différence entre /bin et /usr/bin

Déplacement du contenu de /bin vers /usr/bin, possible d'annuler ?

Pourquoi les répertoires /home, /usr, /var, etc. ont-ils tous le même numéro d'inode (2) ?

Les sites Web doivent-ils vivre dans /var/ ou /usr/ selon l'utilisation recommandée ?