
bash
bash 또는 sh 쉘에서 or 명령, 로그인 쉘, xterm을 사용하여 호출되었는지 어떻게 확인하고 sh
, 그렇다면 어떻게 호출되었습니까?
예를 들어 bash
xterm에서 호출한 다음 해당 인스턴스 내에서 다시 호출하면 다음과 같은 결과가 출력될 수 있습니다.
me@mylinuxmachine:~$ bash
me@mylinuxmachine:~$ bash
me@mylinuxmachine:~$ magic_command
Called by /bin/bash {
Called by /bin/bash {
Called by xterm
}
}
답변1
다음을 위해 사용할 수 있습니다 pstree
:
$ bash
bash-4.4$ pstree -p "$$"
-+= 00001 root /sbin/init
\-+= 85460 kk tmux: server (/tmp/tmux-1000/default) (tmux)
\-+= 96572 kk -ksh93 (ksh93)
\-+= 72474 kk bash
\-+= 14184 kk pstree -p 72474
\-+- 51965 kk sh -c ps -kaxwwo user,pid,ppid,pgid,command
\--- 91001 kk ps -kaxwwo user
이 pstree
유틸리티는 현재 시스템에서 실행 중인 모든 프로세스의 상위-하위 관계를 표시합니다. -p "$$"
현재 셸과 관련된 프로세스(프로세스 ID가 변수에 저장되어 있음 $
) 만 포함하도록 출력을 제한 할 수 있습니다 .
현재 쉘에 도달하는 지점에서 출력을 차단하려면 다음을 사용할 수 있습니다 sed
.
bash-4.4$ pstree -p "$$" | sed "/= $$ /q"
-+= 00001 root /sbin/init
\-+= 85460 kk tmux: server (/tmp/tmux-1000/default) (tmux)
\-+= 96572 kk -ksh93 (ksh93)
\-+= 72474 kk bash
내가 사용하는 것(OpenBSD에서)과 다른 유틸리티를 사용하여 구현된 Linux 시스템의 경우 다음을 사용할 수 있습니다.
$ pstree -salup "$$"
비슷한 출력을 얻고
$ pstree -salup "$$" | sed "/,$$\$/q"
현재 쉘에 도달하는 지점에서 출력을 차단합니다.
다음은 주어진 PID(또는 생략된 경우 현재 쉘의 PID)에 대해 위의 작업을 수행하는 쉘 함수 pls
("프로세스 ls
"에 대해 제가 생각할 수 있는 최선입니다)입니다.
function pls
{
local pid="${1:-$$}"
pstree -salup "$pid" | sed "/,$pid\$/q"
}