linux后台运行方式
方式
让进程可以脱离终端或控制台在后台运行,在Linux中,大概有下面几种方式。
&
在命令之后加个“&“ 符号就可以了 command > out.file(文件) 2>&1(指将标准错误重定向到标准输出) &
#例如 ./test & ./test >> out.file 2>&1 &
此种方式,一旦终端关闭或控制台退出,该进程就会停止运行。
nohub命令
nohup(no hang up) nohup command > out.file 2>&1 &
#例如 nohup ./test & nohup ./test >> out.file 2>&1 &
此种方式,控制台非正常退出时,该进程还会停止运行;需要保证控制台正常退出,才能保证进程一直在后台运行。
使用fork 和 setsid
使用php伪代码如下
<?php umask(0); $pid = pcntl_fork(); if($pid < 0) { exit('fork error'); }else if($pid > 0) { exit('parent process'); } if(!posix_setsid()) { exit('setsid error'); } $pid = pcntl_fork(); if($pid < 0) { exit('fork error'); }else if($pid > 0) { exit('parent process'); } cli_set_process_title("demo"); while(true) { todo();//任务逻辑 }
备注:“二次fork,这里的历史渊源是这样的:在基于system V的系统中,通过再次fork,父进程退出,子进程继续,保证形成的daemon进程绝对不会成为会话首进程,不会拥有控制终端。”