루프 내에서 복잡한 명령 집합을 실행 하는 오래 실행되는 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
아래의 사용 정보/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
. 즉, 내가 찾고있는 것 입니다.