Comment puis-je obtenir les arguments de commande ou la ligne de commande complète d'un processus en cours à l'aide de son nom de processus?
Par exemple ce processus:
# ps
PID USER TIME COMMAND
1452 root 0:00 /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
Et ce que je veux c'est /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
ou les arguments. Je connais le nom du processus et je veux ses arguments. J'utilise Busybox sur SliTaz.
ps
(non recommandé) ou cherchez-vous une commande alternative àps
celle qui vous donnera la sortie? Que faut-il faire quand onps
donne plusieurs lignes de sortie? imprimer tout / premier / dernier?arg
commecommand
dans la réponse @John ?pidof <process name>
ps -o pid, args | grep $ PID | tr -s "" | cut -d "" -f 2 Mais de cette façon, je ne reçois pas les arguments dans une variableRéponses:
Vous pouvez utiliser le
-o
commutateur pour spécifier votre format de sortie:De la page de manuel :
Vous pouvez également utiliser le
-p
commutateur pour sélectionner un PID spécifique:pidof
peut également être utilisé pour passer d'un nom de processus à un PID, permettant ainsi l'utilisation d'-p
un nom:Bien sûr, vous pouvez aussi utiliser
grep
pour cela (dans ce cas, vous devez ajouter le-e
commutateur):GNU ps vous permettra également de supprimer les en-têtes (bien sûr, cela n’est pas nécessaire lors de l’utilisation
grep
):Sur d’autres systèmes, vous pouvez diriger vers AWK ou sed:
Edit: si vous voulez attraper cette ligne dans une variable, utilisez
$(...)
comme d'habitude:ou avec
grep
:la source
args
parcommand
(oucmd
).cmd
etcommand
sont des aliasargs
, c'est probablement inutile.grep
pour attraper la ligne que vous êtes réellement intéressé par:ps -eo args | grep dhcpcd | head -n -1
. J'ai édité ma réponse.Essayez quelque chose comme ça:
(exemple de sortie de busybox sur OpenWrt sur l'un de mes routeurs)
/proc/$PID/cmdline
contient les arguments de processus$PID
comme des chaînes C-ish les unes après les autres. Chaque chaîne est terminée par zéro.Les citations autour de certains arguments ou options font partie du shell. Vous devez examiner de plus près les lignes affichées et l'emplacement des espaces ou autres caractères ayant une signification particulière pour le shell. Vous aurez besoin de citer ce caractère (s) ou l'argument complet lorsque vous joignez à nouveau ces lignes à une ligne de commande.
la source
tr "\0" " " </proc/991/cmdline
\0
«être mauvais», mais je pensetr '\0' '\n' < /proc/$foo/cmdline
être un peu plus simple quexargs
.printf
facilite l'ajout de guillemets à la sortie, l'insertion d'un espace au lieu de la nouvelle ligne, etc. Lorsque vous songez à ajouter davantage de traitement, cette solutionprintf
est un bon début.Méthode n ° 1 - Utiliser ps
Vous pourriez utiliser
ps -eaf | grep 1234
.Exemple
REMARQUE: Busybox
ps
n'inclut pas les-eaf
commutateurs illustrés ci-dessus par rapportps
à la plupart des systèmes Linux. Cependant, Busyboxps
indique une sortie qui ressemble beaucoup à l'exemple que j'ai fourni. Vous pouvez installer Busybox sur la plupart des Linux et l’exécuter comme suit:Méthode n ° 2 - Utiliser / proc
Vous pouvez également consulter le
cmdline
fichier sous lequel se trouve chaque PID/proc/<pid>
.Mais remarquez qu'il manque l'espacement. Cela est dû au fait qu'un caractère NUL est utilisé dans ce fichier pour séparer vos arguments de ligne de commande. Ne vous inquiétez pas cependant, ceux-ci peuvent être supprimés.
Les références
la source
Connaître le PID, juste exec
Par exemple, pour PID = 127
la source