linux下后台运行程序
背景
后台运行程序的时候,如果退出当前的终端(session),你运行的所有程序(包括后台程序),都将被关闭。
原因是:你运行的程序都是你的终端进程的子进程,父进程gg了,子进程也会被干掉。
nohup
、setsid
和pm2
可以帮助我们。
nohup命令
使用方法:
nohup ping baidu.com &
作用:
所有的输出将会被重定向到当前目录的nohup.txt文件下,可以用
tail -f nohup.txt
来跟踪输出结果。
注意事项:
- 使用这个命令不能直接关闭你的终端(直接点击×退出),而要规范地使用
exit
退出,否则系统可能认为你是异常退出,而关闭你所有的子进程,特别是node项目。既然这么坑,node项目就绝不能使用nohup,建议下文所说的pm2。
setsid命令
setsid与nohup不一样,setsid的父进程是init。
使用方式:
setsid ping baidu.com
作用:
- 输出结果还是会出现在终端上,但是你可以在此终端运行其他的程序。
- 如果想要重定向输出结果,可以使用
setsid ping baidu.com >> output.txt
pm2
pm2专门用于管理node的项目。
可以看我另一篇文章:用pm2命令管理你的node项目