Bagaimana cara mendapatkan PID induk dari proses yang diberikan dalam GNU / Linux dari baris perintah?

90

Diselesaikan sebelum ditanya: cat /proc/1111/status | grep PPid

Vi.
sumber
lebih cepat: grep PPid status |cut -f2seperti di time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); bertanya-tanya apakah ada sesuatu yang lebih cepat?
Aquarius Power
1
@AquariusPower Karena Anda bertanya, fgrep lebih cepat daripada grep. fgrep PPid status |cut -f2
jbo5112
sed jauh lebih cepat daripada grep and cut:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Jawaban:

108

Garis komando:

ps -o ppid= -p 1111

Fungsi:

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

Alias ​​( lebih disukai fungsi ):

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

Naskah:

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

Jika tidak ada PID yang disediakan untuk fungsi atau skrip, mereka default untuk menunjukkan PPID dari proses saat ini.

Untuk menggunakan alias, PID harus disediakan.

Dennis Williamson
sumber
The =tanda tidak diperlukan, setidaknya pada OS X 10.8.2.
jtbandes
5
@ jtbandes: Tanda sama dengan yang digunakan di sini menekan output dari baris header ( Linux dan OS X ).
Dennis Williamson
13

Ini adalah salah satu hal yang saya pelajari, lupakan, pelajari kembali, ulangi. Tapi ini berguna. Bendera perintah pstree 's' menunjukkan pohon dengan daun di N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
pengguna194394
sumber
12

Pid Induk dalam variabel shell PPID, jadi

echo $PPID
Ivan Novotny
sumber
1
Ya, tapi 1. Saya ingin orang tua pid dari proses lain, 2. Saya ingin dapat melintasi semua leluhur untuk init.
Vi.
1
Di sisi lain, menggunakan $PPIDtidak hanya menyelesaikan masalah yang saya miliki di mana Google menyarankan halaman ini sebagai jawaban.
Paul Whittaker
12

Untuk mencetak id induk ( PPID) dari semua proses, gunakan perintah ini:

ps j

Untuk proses tunggal, hanya lulus PID, seperti: ps j 1234.

Untuk mengekstrak hanya nilai, filter keluaran oleh awk, seperti:

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

Untuk daftar PID dari semua orang tua, gunakan pstree(instal jika Anda tidak memilikinya):

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

Untuk mendapatkan PID induk dari proses saat ini, gunakan echo $$.

kenorb
sumber
1
pstreeadalah yang terbaik yang pernah saya lihat di sini.
sudo
ps jhebat karena tersedia di banyak distro dan mudah dikomposasikan
Connor McCormick
6

Baca / proc / $ PID / status. Dapat dengan mudah dituliskan:

#! / bin / sh
P = $ 1
jika [-z "$ P"]; kemudian
    baca P.
fi
cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"
Vi.
sumber
2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'itu yang kamu butuhkan. (Sangat jarang alat Unix melakukan if [ -z ]; then readhal itu.)
grawity
@ kegembiraan Ini membantu melakukan hal-hal sepertiecho $$ | ppid | ppid | ppid
Vi.
2
UUOC tidak menggunakan kucing
Felipe Alvarez
@FelipeAlvarez, Tanganku tidak terbiasa mengetik < /some/file grep | grep | ....
Vi.
2
Bagaimana dengangrep /some/file
Felipe Alvarez
4

Di Linux:

ps hoppid $thatprocess
jthill
sumber
2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Contoh yang sedikit lebih kompleks yang memeriksa perintah orang tua yang memulai proses saat ini. Ubah comm = ke cmd = untuk melihat perintah penuh

sebastian_t
sumber
Penggunaan gema yang tidak berguna ? ;)
bobbogo
Ini sebenarnya diperlukan pada beberapa terminal. Sejujurnya saya tidak ingat persis tapi itu benar-benar memecahkan masalah. : D
sebastian_t
1

Ini adalah solusi cepat yang juga bisa digunakan:

ps $$
Gevork Palyan
sumber
Itu tidak memberikan PID induk yang diminta OP.
Dennis Williamson
1

Jalankan topdengan opsi apa pun yang Anda inginkan -u username and -p PID.

Dan saat topsedang bekerja tekan f, itu menunjukkan daftar opsi yang ingin Anda tampilkan dalam topoutput, dan parameter yang ditampilkan akan ditampilkan dalam huruf kapital dan parameter yang menampilkan atau tidak akan ditampilkan dalam huruf kecil.

Jadi dengan memasukkan huruf sebelum parameter Anda dapat mengaktifkan atau menonaktifkannya. Untuk ID proses induk Anda harus memasukkan bdan kemudian tekan Enter, itu akan menampilkan PPID di output atas.

Praveen S.
sumber
1
Ini harus digunakan secara non-interaktif. Saya sudah tahu bahwa di htopAnda dapat mengkonfigurasi PPIDkolom.
Vi.