常用命令

  1. nohup php -f ./run.php & //进入后台执行,输出重定向到当前目录./nohup.log (无权限时输出到 $HOME/nohup.log)
  2. nohup php -f ./run.php >> ./pathName.log & //指定输出的文件
  3. nohup [command] >> ./logName.log 2>&1 & // 错误和异常一起输入
  4. jobs -l // 查询当前终端后台执行的任务。
  5. ps -ef | grep nohup | grep -v grep // 通过进程查询

当用户注销或者网络断开时,终端会收到HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

nohup

nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略hangup信号。

nohup的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out文件中。一般我们可在结尾加上 & 来将命令同时放入后台运行,也可用 >filename 2>&1来更改缺省的重定向文件名。

  1. nohub ./test.sh &
  2. nohup php yiic createdata appbusiness &

相关操作

  • 查看进程 ps -ef | grep nohup
  • 关闭进程 kill -9999
  • 监视后台执行的输入内容 tail -f nohup.out 命令进行查看。

setsid

nohup无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受HUP信号的终端的子进程,那么自然也就不会受到HUP信号的影响了。setsid就能帮助我们做到这一点。

  1. setsid ping www.baidu.com

screen

screen提供了ANSI/VT100的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。

适用于:大量这种命令需要在稳定的后台里运行

  1. screen

这个时候,服务器端会启一个新的终端并且按 ctrl+a+d 就把会保存这个会话,但这个终端,与之前的普通终端不一样,它不隶属于 sshd 进程组,这样,当本地终端关闭后,服务器终端不会被 kill.但上面的那个有一个不好之处就是当会话多了很难分清楚,因此我们要用下面一种命令

  1. screen -S session_name

按ctrl+a+d保存这个会话这样就可以用下面的命令[weblogic@localhost ~]screen -ls sessionname.tty1.server (Detached)

创建会话

  1. // 创建并进入一个会话(制定会话名称)
  2. screen -S session_name
  3. // 创建一个断开模式下的会话(制定会话名称)
  4. screen -dmS session_name

中断会话
ctrl+a+d 快捷键

恢复(链接)会话

  1. screen -r session_name

退出键入exit 就可以退出后台进程了。

会话列表

  1. screen -list

现在几种方法已经介绍完毕,我们可以根据不同的场景来选择不同的方案。nohup/setsid无疑是临时需要时最方便的方法,disown能帮助我们来事后补救当前已经在运行了的作业,而screen则是在大批量操作时不二的选择了。