我编写了一个程序,我通过SSH连接到盒子后运行。它有一些用户交互,例如在提示后选择选项,通常我等待它执行的进程在注销之前完成关闭终端并结束程序。但是现在这个过程非常冗长,我不想在登录时等待,所以我怎么能在C中实现这个解决方法呢?
答案 0 :(得分:7)
您可以按照“&”
的命令在后台运行程序wget -m www.google.com&
或者,您可以使用“屏幕”程序,它允许您附加-deattach会话
屏幕wget -m www.google.com
(按CTRL + D)
screen -r(TO RE ATTACH)
答案 1 :(得分:3)
当shell退出时,该过程被发送HUP信号。您所要做的就是安装一个忽略SIGHUP的信号处理程序。
或者只是使用nohup运行程序。
答案 2 :(得分:2)
执行此操作的传统方法是使用nohup(1)命令:
nohup mycmd < /dev/null >& output.log &
当然,如果您不关心输出,也可以将其发送到/ dev / null,或者如果需要,您可以从文件中获取输入。
这样做会保护您的进程免受通常导致其退出的SIGHUP的影响。您还需要像上面一样重定向stdin / stdout / stderr,因为您将结束ssh会话。
上面显示的语法适用于bash。
答案 3 :(得分:1)
您可以使用 screen 命令。 here is a tutorial。请注意,您可能需要将其安装到您的系统中。
答案 4 :(得分:0)
有很多选项:-) TIMTOWTDI ...但是,出于您的目的,您可能会考虑运行命令行实用程序,例如dtach
或GNU screen
。
如果你真的想在C中实现某些东西,你可以重新发明那个轮子,但是根据你对问题的描述,我怀疑它应该是必要的......
答案 5 :(得分:0)
背景一个过程的实际C代码是微不足道的:
//do interactive stuff...
if(fork())
exit(0);
//cool, I've been daemonized.
如果您知道代码永远不会出现在非Linux或BSD机器上,您甚至可以使用daemon()
//interactive...
daemon(0, 0);
//background...