常用命令
nohup php -f ./run.php & //进入后台执行,输出重定向到当前目录./nohup.log (无权限时输出到 $HOME/nohup.log)nohup php -f ./run.php >> ./pathName.log & //指定输出的文件nohup [command] >> ./logName.log 2>&1 & // 错误和异常一起输入jobs -l // 查询当前终端后台执行的任务。ps -ef | grep nohup | grep -v grep // 通过进程查询
当用户注销或者网络断开时,终端会收到HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
nohup
nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略hangup信号。
nohup的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out文件中。一般我们可在结尾加上 & 来将命令同时放入后台运行,也可用 >filename 2>&1来更改缺省的重定向文件名。
nohub ./test.sh &nohup php yiic createdata appbusiness &
相关操作
- 查看进程
ps -ef | grep nohup - 关闭进程
kill -9999 - 监视后台执行的输入内容
tail -f nohup.out命令进行查看。
setsid
nohup无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受HUP信号的终端的子进程,那么自然也就不会受到HUP信号的影响了。setsid就能帮助我们做到这一点。
setsid ping www.baidu.com
screen
screen提供了ANSI/VT100的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。
适用于:大量这种命令需要在稳定的后台里运行
screen
这个时候,服务器端会启一个新的终端并且按 ctrl+a+d 就把会保存这个会话,但这个终端,与之前的普通终端不一样,它不隶属于 sshd 进程组,这样,当本地终端关闭后,服务器终端不会被 kill.但上面的那个有一个不好之处就是当会话多了很难分清楚,因此我们要用下面一种命令
screen -S session_name
按ctrl+a+d保存这个会话这样就可以用下面的命令[weblogic@localhost ~]screen -ls sessionname.tty1.server (Detached)
创建会话
// 创建并进入一个会话(制定会话名称)screen -S session_name// 创建一个断开模式下的会话(制定会话名称)screen -dmS session_name
中断会话ctrl+a+d 快捷键
恢复(链接)会话
screen -r session_name
退出键入exit 就可以退出后台进程了。
会话列表
screen -list
现在几种方法已经介绍完毕,我们可以根据不同的场景来选择不同的方案。nohup/setsid无疑是临时需要时最方便的方法,disown能帮助我们来事后补救当前已经在运行了的作业,而screen则是在大批量操作时不二的选择了。
