GNU / Linux'ta verilen bir sürecin ebeveyn PID'sini komut satırından nasıl alabilirim?


90

Sormadan önce çözüldü: cat /proc/1111/status | grep PPid


daha hızlı: grep PPid status |cut -f2gibi time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); daha hızlı bir şey olup olmadığını merak ediyorum?
Kova Gücü

1
@AquariusPower İstediğinizden beri, fgrep grep'ten daha hızlı. fgrep PPid status |cut -f2
jbo5112

sed grep ve kesten çok daha hızlı:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Yanıtlar:


107

Komut satırı:

ps -o ppid= -p 1111

İşlev:

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

Diğer ad (bir işlev tercih edilir ):

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

Senaryo:

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

İşlev veya komut dosyasına PID sağlanmazsa, geçerli işlemin PPID'sini göstermek için varsayılan olarak kullanılırlar.

Takma adı kullanmak için bir PID sağlanmalıdır.


=İşareti, en azından OS X 10.8.2 üzerinde, gerekli değildir.
jtbandes,

5
jtbandes: Burada kullanılan eşit işaret, başlık satırının çıktısını bastırır ( Linux ve OS X ).
Dennis Williamson

13

Bu öğrendiğim, unuttum, tekrar öğrendiğim, tekrarladığım şeylerden biri. Ama bu kullanışlı. Pstree komutunun 'bayrağı' N'de yapraklı bir ağaç gösterir:

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

12

Ana pid, PPID kabuk değişkeninde

echo $PPID

1
Evet, ancak 1. Başka bir işlemin üst parazitini istiyorum, 2. Tüm ataları init yapmak için geçmeyi istiyorum.
Vi.

1
Öte yandan, kullanmak $PPIDGoogle’ın bu sayfayı yanıt olarak önerdiği sorunu çözdü.
Paul Whittaker

12

PPIDTüm işlemlerin üst kimliklerini ( ) yazdırmak için bu komutu kullanın:

ps j

Tek bir işlem için, tıpkı, PID geçirmek: ps j 1234.

Yalnızca değeri çıkartmak için, çıktısını awkşunun gibi süzün :

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

Tüm ebeveynlerin PID'lerini listelemek için kullanın pstree(sizde yoksa yükleyin):

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

Geçerli işlemin üst PID değerini almak için kullanın echo $$.


1
pstreeburada gördüğüm en güzel olanı.
sudo

ps jharika çünkü birçok dağıtımda mevcut ve kolayca beste edilebilir
Connor McCormick

6

/ Proc / $ PID / durumunu okuyun. Kolayca kodlanabilir:

#! / Bin / sh
P = $ 1
eğer [-z "$ P"]; sonra
    P oku
fi
cat / proc / "$ P" / durum | grep PPid: | grep -o "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'tüm ihtiyacın olan. ( Unix araçlarının bu şeyi yapması çok nadirdirif [ -z ]; then read .)
Grawity

@grawity Böyle şeyler yapmanıza yardımcı olurecho $$ | ppid | ppid | ppid
Vi.

2
UUOC yararsız kedi kullanımı
Felipe Alvarez

@FelipeAlvarez, Ellerim yazmaya alışkın değil < /some/file grep | grep | ....
Vi.

2
Peki yagrep /some/file
Felipe Alvarez


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Geçerli işlemi başlatan bir ebeveynin komutunu kontrol eden, biraz daha karmaşık bir örnek


Yararsız yankı kullanımı ? ;)
bobbogo 12:17

Aslında bazı terminallerde gereklidir. Dürüst olmak gerekirse tam olarak hatırlamıyorum ama aslında bir sorunu çözdü. : D
sebastian_t


1

topİstediğin seçenekle istediğin gibi koş -u username and -p PID.

Ayrıca top, çalışma sırasında , çıktıda fgörüntülemek istediğiniz seçeneklerin bir listesini gösterir topve görüntülenen parametreler BÜYÜK harflerle ve gösterilecek olan parametreler küçük harflerle gösterilecektir.

Böylece, parametreden önce harfi girerek, onu etkinleştirebilir veya devre dışı bırakabilirsiniz. Üst işlem kimliği için girmeniz bve ardından düğmesine basmanız gerekir Enter, üst çıktısında PPID görüntülenir.


1
Etkileşimli olarak kullanılmamalıdır. Ben zaten senin içinde sütun htopyapılandırabileceğini biliyorum PPID.
Vi.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.