2010-06-08 09:42:29 +0000 2010-06-08 09:42:29 +0000
94
94

Hoe krijg je ouder PID van een bepaald proces in GNU/Linux van de opdrachtregel?

Opgelost voor de vraag: cat /proc/1111/status | grep PPid

Antwoorden (10)

112
112
112
2010-06-08 11:21:06 +0000

Commandoregel:

ps -o ppid= -p 1111

Functie:

ppid () { ps -p ${1:-$$} -o ppid=; }

Alias (een functie is bij voorkeur ):

alias ppid='ps -o ppid= -p'

Script:

#!/bin/sh
pid=$1
if [-z $pid]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

Indien er geen PID aan de functie of het script wordt geleverd, wordt standaard de PPID van het huidige proces getoond.

Om de alias te gebruiken, moet er een PID worden geleverd.

15
15
15
2013-01-31 20:32:13 +0000

Dit is een van die dingen die ik leer, vergeet, herleef, herhaal. Maar het is nuttig. De ‘s’-vlag van het stamcommando toont een boom met een blad bij N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
13
13
13
2012-09-24 11:55:28 +0000

Ouder pid is in shell variabele PPID, dus

echo $PPID
12
12
12
2016-02-19 21:31:34 +0000

Om ouder id’s (PPID) van alle processen af te drukken, gebruik je dit commando:

ps j

Voor het enkelvoudige proces, geef je gewoon het PID door, zoals: ps j 1234.

Om alleen de waarde te halen, filteruitgang door awk, zoals:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
  • *

Om de PID’s van alle ouders op te sommen, gebruik pstree (installeer het als je het niet hebt):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)
  • *

Om het ouder-PID van het huidige proces te krijgen, gebruik echo $$.

6
6
6
2010-06-08 09:44:05 +0000

Lees /proc/$PID/status. Kan gemakkelijk worden gescript:

#!/bin/sh P=$1 if [-z "$P"]; then read P fi cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]\*"
4
4
4
2014-10-21 17:30:05 +0000

Op Linux:

ps hoppid $thatprocess
2
2
2
2014-10-19 20:08:11 +0000
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Een iets complexer voorbeeld dat het commando controleert van een ouder die het huidige proces heeft gestart Wijzig comm= naar cmd= om het volledige commando te zien

1
1
1
2012-11-23 12:21:12 +0000

Voer top uit met de gewenste opties, zoals -u username and -p PID.

En terwijl top werkt, toont het een lijst met opties die u wilt weergeven in top-uitvoer, en de weergegeven parameters worden weergegeven in HOOFDLETTERS en de parameters die al dan niet worden weergegeven worden weergegeven in kleine letters.

Dus door het invoeren van de letter voor de parameter kunt u deze activeren of deactiveren. Voor parent process ID moet je b invoeren en dan op Enter drukken, het zal de PPID weergeven in de bovenste uitvoer.

1
1
1
2013-09-12 06:18:04 +0000

Hier is een snelle oplossing die ook zou moeten werken:

ps $$
0
0
0
2019-10-30 21:51:11 +0000

alle ouderprocessen van een pid

Ik kwam hier toen ik “alle ouderprocessen van een pid” probeerde te vinden. Ik maakte uiteindelijk mijn eigen recursieve functie om het te doen.

pid_lineage.sh

#!/bin/bash -eu

main(){
  ps -p ${1:-$$} -h -o pid,ppid,args | \
    (
      read pid ppid args
      echo -e "$pid\t$args"
      [[$pid -gt 1]] && main $ppid
    )
}

main "$@"