Réponses:
Utilisation ps -o ppid=
ps -o ppid= 2072
return 2061
, que vous pouvez facilement utiliser dans un script, etc. ps -o ppid= -C foo
donne le PPID du processus avec commande foo
. Vous pouvez également utiliser l'ancienne ps | grep
: ps -eo ppid,comm | grep '[f]oo'
.ps -f 2072
retourne
UID PID PPID C TEMPS STAT TEMPS STAT CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstree
relation est pstree -s -p 2072
:
init (1) ulspulseaudio (2061) gconf-helper (2072)
ppid=
mais avant le pid semble être nécessaire. J'ai eu des résultats différents si je l'ai omis.
echo $PPID
si vous avez besoin de la commande de ce pid parent:
cat /proc/$PPID/comm
si vous avez besoin de la ligne de commande complète (avec toutes les options):
cat /proc/$PPID/cmdline
$PPID
est défini par le shell, c'est le PID du processus parent/proc/
, vous avez quelques dirs avec le PID de chaque processus. Ensuite, si vous cat /proc/$PPID/comm
renvoyez le nom de la commande du PIDPPID
est défini dans le cadre de la norme POSIX, donc tout shell compatible POSIX doit le définir correctement. Voir pubs.opengroup.org/onlinepubs/9699919799/utilities/…
pstree
par nom de commandepstree
Vous pouvez utiliser le nom du processus enfant pour obtenir le code de processus (PID), ainsi que les parents, les grands-parents et tous les enfants du processus enfant:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
Dans ce cas, il sleep
s'agit de la commande enfant et de son PID 8414
. Son ID parent est 841 et s'appelle display-auto-brightness
. Le grand - parent est une coque ( sh
) avec un identifiant de processus 839
. L'arrière-grand-parent est cron
doté d'un ID de processus de 795
. L'arrière-arrière-grand-parent est également cron
doté d'un ID de processus de 763
.
Si vous souhaitez rechercher par ID de processus sleep
au lieu de nom, vous pouvez utiliser:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Notez que l' sleep
ID de processus a été remplacé par 14653
. Le parent (PID 841) dort pendant 1 minute, se réveille pendant une fraction de seconde, puis lance une nouvelle sleep
commande qui obtient un nouvel ID de processus. C'est une autre raison pour laquelle la recherche sleep
est plus facile que la recherche par ID de processus.
Ce code provient de: Ajustez automatiquement la luminosité de l'écran en fonction du lever et du coucher du soleil et est adapté à cette question.
Pour voir une chaîne imbriquée jusqu'au processus de démarrage, utilisez le PID au lieu du nom:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Remarque: une minute s'est écoulée et la commande de veille obtient un nouveau PID (8541).
807
ou cron
et la même ligne serait réaccordée, ainsi que plus d'enfants si elle était générée. Mais la question était de trouver le parent, pas tous les enfants.
1
. Je ne pense pas que vous puissiez tuer le PID 1.
ps -efj
peut également être utilisé pour le même.
Par exemple,
> ps -efj | head
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Jul01 ? 00:00:13 /sbin/init splash
root 2 0 0 0 0 Jul01 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Jul01 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Jul01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 Jul01 ? 00:06:44 [rcu_sched]
root 8 2 0 0 0 Jul01 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 Jul01 ? 00:00:00 [migration/0]
root 10 2 0 0 0 Jul01 ? 00:00:08 [watchdog/0]
root 11 2 0 0 0 Jul01 ? 00:00:08 [watchdog/1]
ps -o args ...
les résultats, mais cela sent un peu.