目前我正在开发一个在带触摸屏的嵌入式终端上运行的程序(qt嵌入了QWS)。为了方便测试,我编写了一个调用make的小脚本,通过scp将文件传输到设备,最后通过
启动程序 ssh root@hmi "/mnt/test -qws" &
到目前为止,一切都很顺利。唯一的麻烦是,应用程序不再接受来自触摸屏的输入。我最好的猜测是,ssh使用开发机器中的stdin。我在当地重新定位stdin,但没有成功。
澄清事情:程序已成功启动,并显示在触摸屏上。唯一的问题是,它不接受任何触摸输入(嗯,这是我唯一的输入设备)。
如果我通过ssh登录并启动该程序,它可以正常工作:
ssh root@hmi
/mnt/test -qws
有人可以帮忙吗?
答案 0 :(得分:0)
从上次编辑开始,我认为你的程序是你的应用程序运行然后退出。这是因为ssh执行命令,但不保持“活着”。 为了确定这个想法,我需要你的确认。
(1)你应该做一个简单的测试:打开你登录的2个终端,并用“ps -aux | grep myapp”等不断检查进程,在另一个运行你的ssh脚本。
如果程序运行并立即退出,则必须避免在执行命令后关闭二进制文件。为此,我将创建一个小的shell脚本,如下所示:
#!/bin/sh
nohup /home/somewhere/bin/myapp.EXE & #<--just for fun :) it's a linux binary file
#placed in /home/somewhere/bin/
#notice: nohup to avoid SIGHUP and final "&" to run it in background
#and called (i.e.) script.sh
然后使用如下语法从ssh运行它:
ssh root@pc /home/somewhere/bin/script.sh
最后再次检查(1)现在即使在ssh会话关闭后它仍然存在。
编辑:只是对错误的解释(如果我理解你做了什么)的简短解释
使用ssh命令:
ssh login@domain "command" &
你想在后台运行“命令”,但它没有,这是因为ssh运行命令然后退出,最后&amp;被“丢弃”(如果你明白我的意思)。
因此,为了实现你的目的,你应该写下一个运行你的“命令”并保持活着的脚本(nohup + final&amp;),然后从ssh运行它。