2012-03-17 26 views
2

我已经搜索了一遍,在Google上搜索了一周,甚至和一个非常友好的Linux朋友交谈,但我还没有收到确凿的答案。退出我的非root用户的ssh后,如何让我的Linux程序继续运行?

我编写了一个shell脚本,只要我登录到非root用户并运行基本上就是不带引号的“./myprogram &”。当我退出嘘我的程序超时,我无法连接到它,直到我登录回来。我退出我的非root用户的SSH后,如何让我的程序运行?

我很好奇,如果这必须在程序层面上完成或什么?我很抱歉,如果这不属于这里,我不确定它会在哪里完全诚实。

回答

2

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

SIGHUP将被发送到您的程序,因为父进程(ssh)已经死亡。你可以解决这个问题无论是使用程序nohup(即nohup ./myprogram &)或使用disown./myprogram& disown)内置的外壳,如果它试图写入stdoutstderrssh会议有后

SIGPIPE将被发送到你的程序已断开连接。为了解决这个问题,他们重定向到文件或/dev/null,即nohup ./myprogram >/dev/null 2>/dev/null &

7

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

boybu是一个不错的增强screen

+0

+1考虑交互式过程。也首先我听说过'boybu'......听起来很有趣 – je4d 2012-03-17 12:39:16

0

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

相关问题