Ssh

使用偽終端的 ssh 分離遠端命令

  • November 29, 2016

我正在使用命令在距離我幾米的 raspberryPi+bigMonitor 上執行影片:

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

效果很好。

但是,如果我想使用 ssh 的虛擬終端分配-t,該命令不再起作用。

我真的需要-t在 omxplayer 之前使用帶有“fzf”的基於 ncurses 的影片菜單,但是我所有的具體問題都不重要,因為可以用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

最後的“睡眠 0”可能是@egmont 提出的最佳解決方案。

仍然想知道是否有更好、更可靠的解決方案,以及造成這種情況的確切原因(可能 ssh 關閉 vt 對於並行 nohup/setsid 執行來說太快了)。

問題似乎是,將變成 nohup 以執行 sleep 或 omxplayer 的後台 shell 在變成 nohup 並將信號處理程序設置為忽略之前獲得了 SIGHUP。

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

每次都對我有用,而其他一些方法sleep 0有時會失敗。

引用自:https://unix.stackexchange.com/questions/326494