Uzun süre çalışan bir bash
örneğim var (bir screen
oturumun içinde) bir döngü içinde karmaşık komutlar yürüten (her döngüde borular, yönlendirmeler, vb.).
Uzun komut satırı terminalin içine yazılmıştır - herhangi bir betiğin içinde değildir. Şimdi, bash işlem kimliğini biliyorum ve root erişimine sahibim - içinde komut satırının tam olarak nasıl çalıştığını nasıl görebilirim bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Ve başka bir kabuk örneğinde, PID 1234 içinde yürütülen komut satırını görmek istiyorum:
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'
Mümkün mü?
# 1 DÜZENLEME
Bazı cevaplar için karşı örnekler ekledim.
cmdline
Altında kullanma hakkında/proc/PID
: bu işe yaramaz, en azından benim senaryomda değil. İşte basit bir örnek:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
Başka bir kabukta:
$ cat /proc/8909/cmdline bash
Kullanmak
ps -p PID --noheaders -o cmd
aynı işe yaramaz:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
Ayrıca yararlı değil:$ 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
Yani, ORİJİNAL komut satırının çıktısı yok, bu da aradığım şey - yani
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
.