我搜索过,搜索过,在IRC中待了一个星期,甚至和一个与Linux完全一致的朋友聊过,但我还没有得到一个可靠的答案。
我编写了一个shell脚本,一旦我登录到我的非root用户就会运行,并且基本上只运行“./myprogram&”没有报价。当我退出时,我的程序超时,我无法连接到它,直到我重新登录。在退出非root用户的SSH后,如何保持程序运行?
我很好奇是否必须在程序级别完成或者什么?如果这不属于这里,我表示歉意,我不确定它是完全诚实的。
答案 0 :(得分:7)
除了使用nohup
之外,您还可以在screen
或tmux
等终端多路复用器中运行您的程序。有了它们,您可以重新连接到会话,例如,如果您需要运行基于终端的交互式程序或在不稳定的ssh连接上长时间运行脚本,这将非常有用。
boybu
是screen
的一个很好的增强。
答案 1 :(得分:3)
尝试nohup:http://linux.die.net/man/1/nohup
当你退出ssh会话时,你的程序可能会收到一个SIGHUP信号。
答案 2 :(得分:2)
在ssh
会话结束后,有两个信号可能导致您的程序死亡:SIGHUP
和SIGPIPE
。
SIGHUP
将被发送到您的程序,因为父进程(ssh
)已经死亡。您可以使用程序nohup
(即nohup ./myprogram &
)或使用内置disown
(./myprogram& disown
)
SIGPIPE
会话在stdout
会话断开后尝试写入stderr
或ssh
, /dev/null
将被发送到您的程序。要解决此问题,请将其重定向到文件或nohup ./myprogram >/dev/null 2>/dev/null &
,即{{1}}
答案 3 :(得分:0)
除了其他答案(at
,nohup
,...)之外,您可能还想使用batch(或screen
)命令。 ssh
有一个-f
选项,您可能感兴趣。