J'ai une bash
instance longue (à l'intérieur d'une screen
session) qui exécute un ensemble complexe de commandes à l'intérieur d'une boucle (chaque boucle faisant des tuyaux, des redirections, etc.).
La longue ligne de commande a été écrite à l'intérieur du terminal - elle ne se trouve dans aucun script. Maintenant, je connais l'ID du processus bash et j'ai un accès root - comment puis-je voir la ligne de commande exacte en cours d'exécution à l'intérieur de cela bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Et dans une autre instance de shell, je veux voir la ligne de commande exécutée dans le PID 1234:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done'
Est-ce possible?
EDIT # 1
Ajout de contre-exemples pour certaines réponses que j'ai.
À propos de l'utilisation du
cmdline
sous/proc/PID
: cela ne fonctionne pas, du moins pas dans mon scénario. Voici un exemple simple:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
Dans un autre shell:
$ cat /proc/8909/cmdline bash
L'utilisation
ps -p PID --noheaders -o cmd
est tout aussi inutile:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
n'est pas non plus utile:$ ps -eaf | grep 8909 ttsiod 8909 8905 0 10:09 pts/0 00:00:00 bash ttsiod 30697 8909 0 10:22 pts/0 00:00:00 sleep 30 ttsiod 31292 13928 0 10:23 pts/12 00:00:00 grep --color=auto 8909
Autrement dit, il n'y a pas de sortie de la ligne de commande ORIGINALE, ce que je recherche - c'est-à-dire le
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.