나는 다음 명령을 사용하여 몇 미터 떨어진 raspberryPi+bigMonitor에서 비디오를 실행하고 있습니다.
ssh pi 'omxplayer file.mp4 </dev/null &>/dev/null &'
좋은 결과.
그러나 ssh의 가상 터미널 할당을 사용하려는 경우 -t
이 명령은 더 이상 작동하지 않습니다.
omxplayer 전에 ncurses 기반 비디오 메뉴와 "fzf"를 사용해야 -t
하지만 주요 문제는 sleep 10
omxplayer로 시뮬레이션할 수 있으므로 모든 구체적인 질문은 중요하지 않습니다.
원격 컴퓨터에서:
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
실패합니다.