在进入本文主题之前,我们先来简单学习下Linux的nohup命令。
nohup命令使用场景:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。nohup命令常用于消息队列的消费者进程创建。命令使用案例:
图1
开启一个shell执行窗口,执行如上命令,其中,demo.php的代码是无限循环输出一个变量,代码如下:
图2
demo.php的代码很简单,主要是用于证明nohup是否能实现进程在后台执行。如果nohup能始进程在后台执行,那么,无疑,no里的输出数字会一直递增。事实证明,no里的数字确实会递增,而且使用jobs命令,我们确实也看到了nohup的执行任务。于是,我们可能就会认为,使用nohup命令,可以让程序在后台执行,只要机器不宕机。我们关闭刚才的窗口,好奇地新开一个窗口,在新的窗口下执行jobs命令,发现并没有看到刚才的后台执行任务(为了排除登陆账号对问题排查的干扰,新窗口的登陆账户和关闭的窗口是相同账户),难道关闭窗口后,后台执行的jobs就会被kill掉吗?以后需要让一个进程在后台运行,还不允许关窗口,不允许退出了?如果真是这样,那糟糕透顶。别急,我们通过查看刚才的no文件,发现窗口关闭后,文件内容还不停地有写入,且使用ps aux | grep demo.php | grep -v grep 命令,刚才的进程还在。所以,得出的结论是:
(1)jobs命令不能跨session(新开一个窗口,就是一个session);
(2)nohup命令可以实现后台运行脚本,与账户是否退出无关。