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
Opgelost voor de vraag: cat /proc/1111/status | grep PPid
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.
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
Ouder pid is in shell variabele PPID, dus
echo $PPID
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 $$
.
$ 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
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.
Hier is een snelle oplossing die ook zou moeten werken:
ps $$
Ik kwam hier toen ik “alle ouderprocessen van een pid” probeerde te vinden. Ik maakte uiteindelijk mijn eigen recursieve functie om het te doen.
#!/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 "$@"