当前位置: 技术问答>linux和unix
为什么我退出终端以后 程序自己就停了呢?
来源: 互联网 发布时间:2015-05-14
本文导语: 为什么我在终端执行一个写的程序 ./test & 然后我退出终端(SecureCRT) 然后再登陆 ps aux 一看进程里没有了 为什么呢 test是个监听SOCEKT程序 多进程那种 怎么会有这种情况 现在我为了开这个服务 终端整天挂着 ...
为什么我在终端执行一个写的程序 ./test &
然后我退出终端(SecureCRT)
然后再登陆 ps aux 一看进程里没有了
为什么呢
test是个监听SOCEKT程序
多进程那种
怎么会有这种情况 现在我为了开这个服务 终端整天挂着
然后我退出终端(SecureCRT)
然后再登陆 ps aux 一看进程里没有了
为什么呢
test是个监听SOCEKT程序
多进程那种
怎么会有这种情况 现在我为了开这个服务 终端整天挂着
|
当然了,因为终端是进程的控制终端,控制终端退出后所有该session的进程全部退出。接管SIGHUP是办法,不过用nohup urapp执行更简单。
|
你要把自己的程序以Deamon的方式运行
|
比如要执行的应用名称为urapp,登录后用nohup urapp&放入后台执行,退出后urapp会继续运行。
deamon方式要在你的应用里解除控制终端,一般是用fork/setsid的方法。可以看看APUE。
deamon方式要在你的应用里解除控制终端,一般是用fork/setsid的方法。可以看看APUE。
|
不好意思,一个同事用我账户上网,fierygnu(va_list) 说的是对的,
应该这样写:
main()
{
switch(fork())
{
case -1://无法fork
exit(-1);
case 0:fclose(stdin);
fclose(stderr);
signal(SIGCLD,SIG_IGN);
//程序要完成的任务
default:exit(0);
}
}
应该这样写:
main()
{
switch(fork())
{
case -1://无法fork
exit(-1);
case 0:fclose(stdin);
fclose(stderr);
signal(SIGCLD,SIG_IGN);
//程序要完成的任务
default:exit(0);
}
}