Réponses:
Utilisation ps -o ppid=
ps -o ppid= 2072return 2061, que vous pouvez facilement utiliser dans un script, etc. ps -o ppid= -C foodonne le PPID du processus avec commande foo. Vous pouvez également utiliser l'ancienne ps | grep: ps -eo ppid,comm | grep '[f]oo'.ps -f 2072retourne
UID PID PPID C TEMPS STAT TEMPS STAT CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstreerelation 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/commrenvoyez le nom de la commande du PIDPPIDest 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/…
pstreepar nom de commandepstreeVous 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 sleeps'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 crondoté d'un ID de processus de 795. L'arrière-arrière-grand-parent est également crondoté d'un ID de processus de 763.
Si vous souhaitez rechercher par ID de processus sleepau 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' sleepID 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 sleepcommande qui obtient un nouvel ID de processus. C'est une autre raison pour laquelle la recherche sleepest 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).
807ou cronet 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.