linux后台运行和开机启动篇【一】

本篇将会讲解linux的如何后台运行一个程序以及开机启动机制和如果设置开机启动,同时会提供一些参考资料。

 

先说如何后台运行,确切的手势终端关闭后终端中启动的进程不被结束。

我们都知道linux的程序是以终端为单位的。如果在终端中启动了某个程序,当终端关闭后,相应的程序也会终止。

为什么会这样呢?因为linux中某个终端启动的进程都是其子进程,当终端关闭后,linux就会收到hung  up (挂电话的意思)的信号,然后把对应终端的子进程都关闭,然后就没有然后了。。。

 

 

所以要使某个进程不被结束,有两种办法:

1.linux忽略终端的hung up 信号,不关闭进程;

2.让此进程变为终端的非子进程。

 

第一种的实现方案就是nohup命令。

例如要启动jboss,可以nohup  ./run.sh  &。这样就可以了,结尾的“&”符号表示后台启动jboss,从而不影响继续运行其他命令。

 

但这样有一个问题,nohup命令虽然可以让linux“放过”这个进程,但是nohup会同时把进程的控制台输出重定向到nohup.txt下(默认是这个文件),当然可以重定向为其他的文件,但是输出总会有的。

 

如果jboss运行很长时间,而且如果有很多控制台输出的话,nohup.txt文件就会变的很大很大。

 

通常项目中的日志都会输出到特定的日志文件或者输出到数据库中,也就是说控制台的输出对于程序的意义不大,那么可不可以抛弃掉这些输出呢?答案是肯定的。

 

这里讲解一下linux的重定向(注意,是linux的重定向,不是针对nohup)。

0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。

 

在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。

另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。

 

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。

 

结合nohup,我们可以这样nohup  ./run.sh   >/dev/null   &

这是最简单的一种方式,既保证了程序能够一直后台执行,又能保证不会产生太大的nohup.txt文件。

 

第二种方式就是利用的linux的一个机制,让程序在subshell中执行,方法很简单,将命令用括号() 括起来即可。

 

ps -ef | grep test

可以看到run.sh的父进程为1,不是当前终端了,这样就能忽略hung  up信号。

 

当然linux还可以动态的让程序后台运行或不被hung  up 信号关闭,例如disown命令,setid命令等。

 

可以参考这篇文章:http://www.cnblogs.com/xianghang123/archive/2011/08/02/2125511.html

 

下篇文章继续讲解linux的开机启动机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值