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


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.


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

12

Pid Induk dalam variabel shell PPID, jadi

echo $PPID

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 $$.


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] *"

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


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


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

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.


1
Ini harus digunakan secara non-interaktif. Saya sudah tahu bahwa di htopAnda dapat mengkonfigurasi PPIDkolom.
Vi.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.