场景分析:
如何不间断的以后台进程来运行某个进程呢?
给个示例脚本如下:
脚本tim.sh:
#!/bin/bash while [ 1 -le 2 ] do echo 'hello'>/dev/null done这个shell 脚本会不断的将‘hello’字符串的值丢入/dev/null中,保证当前的进程不断的运行。
执行脚本:
/bin/bash tim.sh效果如下:
打开另一个shell,执行:ps –ef|grep tim.sh,可以查看到当前的tim.sh进程正在执行:
但是,第一个/bin/bash tim.sh,执行ctr+c或者退出当前窗口,该tim.sh消失。
添加&执行脚本: /bin/bash tim.sh &当前的进程直接在后台运行,控制台上输出进程号,此时如果执行logout命令,则该进程仍然可以在后台运行,但是,如果强制关闭Xshell客户端,则结束该会话会发送signup信号会关闭该进程。
除了添加&还要添加nohup执行脚本:
nohup /bin/bash tim.sh &此时,之前控制台的输出结果会被重定向到当前目录下的nohup.out文件(注意:如果用户不具备当前目录可写的权限,那么nohup.out将输出到用户的home目录下,比如,root用户为/root/下)。并且,即时强制关闭XShell终端或者网络断开,该tim.sh进程仍然可以运行。
区分:&和nohup
&指的是将进程放在后台运行,nohup是不间断的运行某个进程。因此,两者没有交集。
补充:nohup相关知识
因为普通的程序并不能真正脱离登录会话而运行进程,为了使得系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。
输入man nohup给出的解释如下:
nohup
NAME:
nohup – run a command immune tohangups, with output to a non-tty.
就是指,用nohup运行命令可以使命令永久的执行下午,和用户终端没有关系。(例如:我们断开SSH连接也不会影响它的运行)
注意:nohup没有后台运行的意思,&才是后台运行。