当前位置: 技术问答>linux和unix
telnet到主机去运行一个我编的程序,退出telnet时那个程序也不运行了,这是怎么回事?按程序逻辑它应该一直运行下去的。
来源: 互联网 发布时间:2015-04-11
本文导语: 我开两个telnet窗口,在第一个窗口运行那个程序,在第二个窗口用ps -ef看,程序在运行。然后我把第一个窗口关掉,到第二个窗口用ps -ef看,程序没有了。这是什么原因?怪啊! | 解决办法:...
我开两个telnet窗口,在第一个窗口运行那个程序,在第二个窗口用ps -ef看,程序在运行。然后我把第一个窗口关掉,到第二个窗口用ps -ef看,程序没有了。这是什么原因?怪啊!
|
解决办法:
1. 将程序做成一个与SHELL无关的程序,就是说涉及到标准输入、标准输出、错误输出的信息都要重定向,可以用dup2函数实现;(其实,就是守护进程)
2. 如果不想更改程序的话,就按照下面的做也可以实现守护进程:
yourproc 1>/dev/null 2>/dev/null
这样可以将程序的标准、错误输出重定向到系统垃圾桶,也就是实现了守护进程。
1. 将程序做成一个与SHELL无关的程序,就是说涉及到标准输入、标准输出、错误输出的信息都要重定向,可以用dup2函数实现;(其实,就是守护进程)
2. 如果不想更改程序的话,就按照下面的做也可以实现守护进程:
yourproc 1>/dev/null 2>/dev/null
这样可以将程序的标准、错误输出重定向到系统垃圾桶,也就是实现了守护进程。
|
正常,因为你的程序是SHELL相关的。
所谓SHELL相关,就是说你的程序是需要SHELL命令行支持的,一旦SHELL命令行没有了,程序就会自动退出。
举个例子,一个简单的程序:
#include
#include
int main(int argc, char* argv[])
{
printf("Hellon");
getchar();
}
运行时是需要用户在命令行响应的,但是如果你把命令行关闭(可能是Windows的cmd,可能是UNIX的Shell),这个程序就一定会退出。
所谓SHELL相关,就是说你的程序是需要SHELL命令行支持的,一旦SHELL命令行没有了,程序就会自动退出。
举个例子,一个简单的程序:
#include
#include
int main(int argc, char* argv[])
{
printf("Hellon");
getchar();
}
运行时是需要用户在命令行响应的,但是如果你把命令行关闭(可能是Windows的cmd,可能是UNIX的Shell),这个程序就一定会退出。
|
用nohup执行:
nohup urapp&
nohup urapp&
|
nohup app&
|
将它变成后台运行就行了,这样就不依赖于你的控制台了。