screen
다수 또는 tmux
(또는 둘 다) "탭" 과 같이 동일한 사용자 ID로 실행되는 다수의 대화형 쉘이 있다고 가정하십시오 . 장치를 "ing" 하려고 unmount
하지만 셸 세션 중 하나의 현재 디렉터리가 변경되었기 때문에 그렇게 할 수 없다는 것을 알게 되었습니다. TTY 이름과 (다른 bash
또는 )와 zsh
연관된 프로세스 목록을 쉽게 찾을 수 있지만 kill
안전하다고 확신할 때까지 이를 원하지 않는다고 가정하면 해당 screen
/ tmux
"탭을 어떻게 찾을 수 있습니까? "?
답변1
이것이 최선의 방법인지는 확실하지 않지만 "단일" 방법입니다.
먼저, 기기가 어떤 "screen" 또는 "tmux" 세션을 열었는지 확인합니다.
lsof -R $mountpoint
이 출력에서 필요한 일부 정보는 프로세스의 PID와 해당 PPID입니다( $PID
및 각각에 할당했다고 가정 $PPID
).
다음으로, 이 PID에서 어떤 하위 프로세스가 실행되고 있는지 확인하세요. 이는 이 셸에서 다른 컴퓨터로 들어가는 것을 방지하는 데 도움이 되거나 ssh
현재 편집기나 다른 프로그램을 실행 중인 경우에 도움이 됩니다. 무언가가 실행 중이라면 하위 명령을 기반으로 원하는 탭을 쉽게 찾을 수 있습니다.
pstree -p $PID
위 명령이 출력을 생성하지 않는다고 가정하면 이제 이 쉘의 상위가 무엇인지 확인해야 합니다.
ps -f $PPID
그렇지 않다면 SCREEN
꽤 tmux
쉽게 알아낼 수 있을 것입니다.
그렇다면 SCREEN
프로세스가 여러 개 있고 SCREEN
필요한 하위 프로세스를 확인하여 어떤 프로세스인지 확인할 수 있어야 합니다.
pstree -p $PPID
여전히 여러 개의 탭이 있는 경우 각 탭에서 새 탭을 열고 어떤 탭인지 알아낼 때까지 SCREEN
계속 다시 실행하면 됩니다. pstree -p $PPID
그 후에는 각 탭을 확인하고 어떻게든 올바른 탭을 찾아야 합니다. 셸에서 셸의 PID가 $PID
문제가 있는 셸 또는 해당 하위 항목( pstree -p $PID
위에서 생성된) 중 하나의 PID와 일치하는지 확인할 수 있습니다.
그렇다면 tmux
모든 쉘이 하나의 tmux 아래에 있기 때문에 쉽지 않습니다. 그러나 수행할 수 있는 작업은 tmux
열려 있는 모든 창에 키 입력 정보를 자동으로 보내는 것입니다. 그곳에서 편집기를 실행하면 예상치 못한 결과가 나올 수 있지만, 그렇게 할 수 있다면 아마도 가장 잘 알 것입니다.
for i in $(tmux list-panes -a | awk -F': ' '{print $1}'); do
tmux send-keys -t $i "[[ \$\$ == $PID ]] && logout" Enter
done