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が提案した「スリープ0」はおそらく最高の解決策でしょう。

より良い、より信頼できる解決策があるかどうか、そしてこれの正確な原因が何であるかまだ疑問に思います。 (sshがvtを終了すると、並列nohup / setsidの実行に速すぎる可能性があります。)

ベストアンサー1

問題は、nohupに移動してスリープモードまたはomxplayerを実行しているバックグラウンドシェルがnohupに移動して信号ハンドラを無視するように設定する前にSIGHUPを受信することです。

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

私には毎回効果がありますが、他の方法は時々sleep 0失敗します。

おすすめ記事