Linux 后台运行命令 nohup命令
一、简单的使用方法:
(1)简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止。要实现守护进程,一种方法是按守护进程的规则去编程,比较麻烦;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序:
nohup <程序名> &示例: 1)nohup php index_cli.php updateuser autoUpdate &2)nohup startWeblogic.sh &3)nohup php Stat.php setStat > ./logs/setStat.log 2>&1 & // 输出到指定日志
(2)则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整的守护进程功能。如果想要监控标准输出可以使用:
tail -f nohup.out
(2)当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态。在有多个后台程序时,要使用来参数的fg命令将不同序号的后台作业切换到前台上运行。
$ jobs[1]+ Running fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &$ fg %1fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz
(3)当程序已经在前台执行的时候,可以使用^Z将这个程序挂起,暂停执行。然后可以使用bg命令将这个挂起的程序放到后台执行,或者使用fg将某个在后台或挂起的进程放到前台执行。当然也可以使用^C将这个程序进程删掉。
(4)在启动了多个程序之后,可以使用ps命令来查看这些进程及其状态,使用kill来杀死进程。
ps -fe | grep updateuserkill 5203
(5)统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。
– c 统计字节数, – l 统计行数, – w 统计字数
wc nohup.out -l结果:16 nohup.out
二、相关说明:
(1)当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。
(2)从上面的ps的输出结果可以看出,有些程序没有控制终端,这些程序通常是一些后台进程。使用命令nohup当然可以启动这样的程序,但nohup启动的程序在进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。如果偶然某个守护进程消失了,那么它提供的服务将不再能被使用。
(3)在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件/etc/inet.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相应反应会迟缓一些,不适合用于被密集访问的服务进程
文章来源:http://www.cnblogs.com/pangguoming/p/5956823.html