ssh 使用伪终端分离远程命令

ssh 使用伪终端分离远程命令

我正在离我几米的 raspberryPi+bigMonitor 上运行视频,命令为:

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

效果很好。

但如果我想使用 ssh 的虚拟终端分配,-t该命令就不再起作用了。

我确实需要-t在 omxplayer 之前使用基于 ncurses 的视频菜单和“fzf”,但我所有的具体问题都不重要,因为主要问题可以用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

最后“sleep 0”可能是最好的解决方案,由@egmont 提出。

仍然想知道是否有更好、更可靠的解决方案,以及造成这种情况的确切原因是什么(可能 ssh 关闭 vt 对于并行 nohup/setsid 运行来说太快)。

答案1

问题似乎是,将转为 nohup 以运行 sleep 或 omxplayer 的后台 shell 在转为 nohup 并将信号处理程序设置为忽略之前收到 SIGHUP。

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

每次都对我有用,而其他一些方法有时sleep 0会失败。

相关内容