Comment obtenir la ligne de commande arguments passés à un processus en cours d'exécution sur les systèmes unix/linux?
Sur SunOS il est pargs
de commande qui imprime les arguments de ligne de commande passés au processus en cours d'exécution.
Est il existe une commande similaire sur d'autres environnements Unix?
tr \\0 ' ' < /proc/<pid>/cmdline
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs options:
Il n'y a plus d'infos dans
/proc/<pid>
sur Linux, il suffit de jeter un coup d'oeil.Sur d'autres systèmes Unix, les choses peuvent être différentes. Le
ps
commande fonctionnera partout, la/proc
truc est spécifique au système d'exploitation. Par exemple sur AIX il n'y a pas decmdline
dans/proc
.ps -ww -fp <pid>
) pour spécifier l'échelle de sortie, car si il y a plusieurs commandes, ils pourraient être coupée.-ww
option permet l'accès à tous les arguments de ligne de commande (comme beaucoup comme est stockée par le noyau). Voir Aussi: comment solaris et bsd obtenir le untruncated ligne de commande paramètres d'un processus d' et ps optionscat /proc/<pid>/cmdline
travaille également sur Cygwin, où la ligne de cmd arguments ne sont pas affichés dansps
avec toutes les options.args
, la commande estps -o args -p <pid>
et il ne imprimer laargs
ou utilisez -ocmd
si vous avez seulement besoin de voir lecmd
. Essayer de lire/proc/<pid>/cmdline
ne sera pas toujours le cas pour les unprivilege utilisateurs. Leps
l'utilitaire de travail./proc/<pid>/cmdline
est limitée (codé en dur à la valeur de PAGE_SIZE paramètre de noyau), de sorte que plus les lignes de commande sont toujours tronqués! Voir stackoverflow.com/questions/199130/... pour plus d'info. Vous pouvez interroger votre paramètre du noyau avecgetconf PAGE_SIZE
, il est généralement 4096.ps -fp
commande a fonctionné pour moi sur Debian et Ubuntu./proc/<pid>/comm
Cela fera l'affaire:
Sans xargs, il n'y aura pas d'espaces entre les arguments, parce qu'ils ont été convertis NULs.
xargs -0 < /proc/<pid>/cmdline
.Plein de ligne de commande
Pour Linux & Système Unix, vous pouvez utiliser
ps -ef | grep process_name
pour obtenir la ligne de commande complet.Sur SunOS systèmes, si vous voulez obtenir plein de ligne de commande, vous pouvez utiliser
Pour obtenir le plein de ligne de commande vous avez besoin pour devenir super-utilisateur.
Liste des arguments
donnera une liste détaillée des arguments passés à un processus. Il sera de sortie le tableau des arguments de ce genre:
Je n'ai pas trouvé de similaire de commande pour Linux, mais je voudrais utiliser la commande suivante pour obtenir le même résultat:
+1
Sur Linux
vous la ligne de commande du processus (y compris args) mais avec tous les espaces changé à NUL caractères.
Vous pouvez utiliser
pgrep
avec-f
(ligne de commande complet) et-l
(description longue):Cette méthode a une différence essentielle avec les autres réponses: il fonctionne sur CygWin, de sorte que vous pouvez l'utiliser pour obtenir la ligne de commande complet de tous les processus s'exécutant sous Windows (exécuter en tant que élevée si vous souhaitez que les données relatives à toute élévation/admin processus). Toute autre méthode pour ce faire sur Windows est plus maladroit, par exemple.
En outre: au cours de mes tests, le pgrep a été le seul système qui fonctionne pour obtenir le chemin d'accès complet pour scripts en cours d'exécution à l'intérieur de CygWin du python.
$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
Une autre variante de l'impression
/proc/PID/cmdline
avec des espaces Linux est:De cette façon
cat
imprime Les caractères NULL comme^@
puis de les remplacer par un espace à l'aide desed
;echo
imprime un caractère de saut de ligne.Plutôt que l'utilisation de plusieurs commandes pour modifier le flux, il suffit d'utiliser un tr se traduit par un personnage à l'autre:
En plus de tous les moyens ci-dessus pour convertir le texte, si vous utilisez simplement les 'chaînes', il va faire la sortie sur des lignes séparées par défaut. Avec l'avantage supplémentaire qu'il peut également empêcher les caractères qui peut brouiller votre terminal d'apparaître.
À la fois de sortie en une seule commande:
cordes /proc/cmdline /proc//environ
La vraie question est... est-il un moyen de voir la vraie ligne de commande d'un processus dans Linux qui a été modifié de sorte que le cmdline contient le texte modifié au lieu de la commande réelle qui a été exécuté.
Sur Solaris
similaire peut être utilisé sur les systèmes unix.
Sur Linux, avec bash, à la sortie, tel que cité args de sorte que vous pouvez modifier la commande et exécutez à nouveau il
Sur Solaris, avec bash (testé avec 3.2.51(1)-release) et sans gnu userland:
Linux bash Exemple (coller dans le terminal):
De sortie:
Solaris Bash Exemple:
De sortie:
Vous pouvez simplement utiliser:
essayer "ps -n" dans un terminal linux. cela fera apparaître:
1.Tous les processus en cours d'EXÉCUTION, leur ligne de commande et leur Pid
Par la suite, vous saurez quel processus pour tuer
Si vous souhaitez obtenir une longue possible (pas sûr de ce qu'il y a des limites), similaire à la version de Solaris pargs, vous pouvez l'utiliser sur Linux & mac OSX: