是否可以从terminal运行一个程序,并让它在closuresterminal后继续运行?

我已经写了一个程序,我通过SSH连接到框后运行。 它有一些用户交互,例如提示后select选项,通常我会等待它执行的过程在注销之前完成,然后closuresterminal并结束程序。 但是现在这个过程非常漫长,我不想在login的时候等待,那么我怎样才能在C中实现这个解决方法呢?

你可以在后台运行一个程序,用“&”

wget -m http://www.google.com&

或者,你可以使用“屏幕”程序,它允许你附加deattach会议

屏幕wget -m http://www.google.com

(按CTRL + D)

屏幕-r(重新连接)

http://linux.die.net/man/1/screen

这个进程在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...