ループ内で複雑な一連のコマンドを実行しているbash
(screen
セッション内で)長時間実行されているインスタンスがあります(各ループはパイプ、リダイレクトなどを実行します)。
長いコマンドラインはターミナル内に記述されました-スクリプト内にはありません。これで、bashプロセスIDがわかりました。ルートアクセス権がありbash
ます。その中で実行されている正確なコマンドラインを確認するにはどうすればよいですか。
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
そして、別のシェルインスタンスで、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'
これは可能ですか?
編集#1
私が持っているいくつかの答えに反例を追加します。
cmdline
underの使用について/proc/PID
は、少なくとも私のシナリオでは機能しません。以下に簡単な例を示します。$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
別のシェルで:
$ cat /proc/8909/cmdline bash
使用すること
ps -p PID --noheaders -o cmd
は無意味です:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
役に立たない:$ 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
つまり、ORIGINALコマンドラインの出力はありません。これは、私が探しているものです
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
。