Ssh
使用偽終端的 ssh 分離遠端命令
我正在使用命令在距離我幾米的 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
有時會失敗。