리소스를 잠그는 TTY 세션을 추적하는 가장 좋은 방법은 무엇입니까?

리소스를 잠그는 TTY 세션을 추적하는 가장 좋은 방법은 무엇입니까?

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

그렇지 않다면 SCREENtmux쉽게 알아낼 수 있을 것입니다.

그렇다면 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

관련 정보