加&是不行的。
因为不管是后台还是前台,都是terminal 的子进程。terminal一关,父进程在推出前,会杀掉所有的子进程。
Linux 里有一些工具,可以脱钩父子进程。比如screen,ubuntu/debian用apt安装。
apt-get install screen用法:在terminal里打
screen然后运行你的程序。
再按
ctrl +a, ctrl +d.
就脱钩了。可以关terminal了。
想挂钩,用
screen -r如果有多个脱钩进程,比如
There are several suitable screens on:8881.pts-0.Jordan(Detached)
8494.pts-0.Jordan(Detached)
用
screen -r [pid]比如
screen -r 8881在Linux的shell终端中执行一个命令时是不能关掉终端的,否则程序也会终止。但是有些耗时比较长的命令是无法保证一直开着终端的,费电就不说了,毕竟网络还有不稳定的时候,一掉线程序也关掉了。
解决方法是nohup命令,在程序的前面加上nohup,程序的后面加上&,这样程序就会一直执行直到结束。
比如:nohup php spider.php &
回车,然后提示一堆东西,再次回车,回到shell界面。
这就可以了。
还有一个问题:程序在执行中会输出一些信息,如果后台执行的话,这些信息是不是没法看了?(比如:程序执行出错终端,想看看报错信息之类的)。使用了nohup命令后,会在当前目录下生成一个nohup.out的日志文件,记录的就是命令的输出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)