UP | HOME

linux后台运行方式

Table of Contents

方式

让进程可以脱离终端或控制台在后台运行,在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进程绝对不会成为会话首进程,不会拥有控制终端。”

其他

查看后台进程

jobs命令

jobs -l

ps命令

ps aux | grep test

First created: 2020-02-18 17:38:33
Last updated: 2021-11-25 Thu 23:23
Power by Emacs 27.1 (Org mode 9.4)
© 2017 – 2021 by josephzeng