退出非root用户的ssh后,如何保持Linux程序运行?

时间:2012-03-17 11:51:54

标签: linux debian

我搜索过,搜索过,在IRC中待了一个星期,甚至和一个与Linux完全一致的朋友聊过,但我还没有得到一个可靠的答案。

我编写了一个shell脚本,一旦我登录到我的非root用户就会运行,并且基本上只运行“./myprogram&”没有报价。当我退出时,我的程序超时,我无法连接到它,直到我重新登录。在退出非root用户的SSH后,如何保持程序运行?

我很好奇是否必须在程序级别完成或者什么?如果这不属于这里,我表示歉意,我不确定它是完全诚实的。

4 个答案:

答案 0 :(得分:7)

除了使用nohup之外,您还可以在screentmux等终端多路复用器中运行您的程序。有了它们,您可以重新连接到会话,例如,如果您需要运行基于终端的交互式程序或在不稳定的ssh连接上长时间运行脚本,这将非常有用。

boybuscreen的一个很好的增强。

答案 1 :(得分:3)

尝试nohup:http://linux.die.net/man/1/nohup

当你退出ssh会话时,你的程序可能会收到一个SIGHUP信号。

答案 2 :(得分:2)

ssh会话结束后,有两个信号可能导致您的程序死亡:SIGHUPSIGPIPE

SIGHUP将被发送到您的程序,因为父进程(ssh)已经死亡。您可以使用程序nohup(即nohup ./myprogram &)或使用内置disown./myprogram& disown

来解决此问题 如果SIGPIPE会话在stdout会话断开后尝试写入stderrssh

/dev/null将被发送到您的程序。要解决此问题,请将其重定向到文件或nohup ./myprogram >/dev/null 2>/dev/null &,即{{1}}

答案 3 :(得分:0)

除了其他答案(atnohup,...)之外,您可能还想使用batch(或screen)命令。 ssh有一个-f选项,您可能感兴趣。