SSH는 의사 터미널을 사용하여 원격 명령을 분리합니다.

SSH는 의사 터미널을 사용하여 원격 명령을 분리합니다.

나는 다음 명령을 사용하여 몇 미터 떨어진 raspberryPi+bigMonitor에서 비디오를 실행하고 있습니다.

ssh    pi 'omxplayer file.mp4 </dev/null &>/dev/null &'

좋은 결과.

그러나 ssh의 가상 터미널 할당을 사용하려는 경우 -t이 명령은 더 이상 작동하지 않습니다.

omxplayer 전에 ncurses 기반 비디오 메뉴와 "fzf"를 사용해야 -t하지만 주요 문제는 sleep 10omxplayer로 시뮬레이션할 수 있으므로 모든 구체적인 질문은 중요하지 않습니다.

원격 컴퓨터에서:

watch -n1 'ps aux | grep [s]leep\ 10'   #monitoring if 'sleep' running.

로컬 머신에서 다양한 테스트를 수행합니다.

ssh -t pi 'sleep 10 </dev/null &>/dev/null &'                  #not working
ssh -t pi 'nohup  sleep 10 </dev/null &>/dev/null & disown'    #not working
ssh -t pi 'setsid sleep 10 </dev/null &>/dev/null &'           #not working
ssh -t pi 'nohup  sleep 10 </dev/null &>/dev/null & sleep 0'   #works OK !!!!
ssh -t pi 'setsid sleep 10 </dev/null &>/dev/null & sleep 0'   #works OK
ssh -t pi 'nohup  sleep 10 </dev/null &>/dev/null & /bin/true' #not working
ssh -t pi 'nohup  sleep 10 </dev/null &>/dev/null & (true & wait)' #works ok

마지막으로 @egmont가 제안한 "sleep 0"이 아마도 최고의 솔루션일 것입니다.

더 좋고 더 신뢰할 수 있는 솔루션이 있는지, 그리고 이것의 정확한 원인이 무엇인지 여전히 궁금합니다. (ssh가 vt를 종료하는 것이 병렬 nohup/setsid 실행에 너무 빠를 수도 있습니다.)

답변1

문제는 nohup으로 이동하여 절전 모드나 omxplayer를 실행하는 배경 셸이 nohup으로 이동하여 신호 처리기를 무시하도록 설정하기 전에 SIGHUP을 수신한다는 것입니다.

ssh -t pi 'trap HUP "" ; omxplayer file.mp4 </dev/null &>/dev/null &'

나에게는 매번 효과가 있지만 다른 방법은 때때로 sleep 0실패합니다.

관련 정보