我已经写了一个程序,我通过SSH连接到框后运行。 它有一些用户交互,例如提示后select选项,通常我会等待它执行的过程在注销之前完成,然后closuresterminal并结束程序。 但是现在这个过程非常漫长,我不想在login的时候等待,那么我怎样才能在C中实现这个解决方法呢?
你可以在后台运行一个程序,用“&”
wget -m http://www.google.com&
或者,你可以使用“屏幕”程序,它允许你附加deattach会议
屏幕wget -m http://www.google.com
(按CTRL + D)
屏幕-r(重新连接)
这个进程在shell退出时发送HUP信号。 你所要做的就是安装一个忽略SIGHUP的信号处理程序。
或者使用nohup运行程序。
你可以使用屏幕命令。 这里是一个教程 。 请注意,您可能需要将其安装到您的系统。
传统的做法是使用nohup(1)命令:
nohup mycmd < /dev/null >& output.log &
当然,如果你不关心输出,你也可以把它发送到/ dev / null,或者你可以从文件中输入。
这样做将保护您的进程,通常会导致它退出SIGHUP。 你也会像上面那样重定向stdin / stdout / stderr,因为你将会结束你的ssh会话。
上面显示的语法用于bash。
有很多选项:-) TIMTOWTDI …然而,为了您的目的,您可能会考虑运行一个命令行工具,如dtach
或GNU screen
。
如果你真的想用C语言实现某些东西,你可以重新发明这个轮子,但是从你对问题的描述中,我怀疑它是否有必要。
实际的C代码背景进程是微不足道的:
//do interactive stuff... if(fork()) exit(0); //cool, I've been daemonized.
如果你知道代码永远不会在非linux或BSD机器上运行,你甚至可以使用daemon()
//interactive... daemon(0, 0); //background...