Linux中如何让某个进程后台运行

实际使用时,即使当前终端断开,也需要进程能够一直运行,本文罗列一下可以让进程持续运行的几种方式。

1. 标准service
大部分采用rpm、deb等发行的安装包,默认都提供此种方式。而且通常情况下当程序安装完成后,会自动注册到系统的服务列表(通常是在/etc/init.d/目录创建软连接);当然也可以自己根据当前系统手动创建对应的文件来实现服务的注册(例如centos7+的systemctl方式)。

2.nohup方式
最经典的搭配即为如下方式:
nohup <command> &
不过此种情况下,所有的控制台输出默认都会被保存到nohup.out文件中,因此经常造成此文件巨大无比,所以实际使用时,经常是使用此种方式:
nohup <command> >/dev/null 2>&1 &
这里有个小插曲,因为很久没有研究后台运行这块了,我一直以为单纯的使用&就可以让进程在脱离当前会话终端长期运行,经过实践后发现并不是;而我实际一直使用的仅仅添加&就能让进程在后台运行的方式其实是下面这种方式

3.在命令后面添加&,然后将整条命令放到脚本里启动
新建一个run.sh文件,然后在其中写入如下内容:
<command> &
然后chmod +x run.sh为其添加可执行权限,之后./run.sh来执行这个脚本,此时进程虽然会输出到当前终端会话,但其实进程已经脱离了当前会话,此时你可以安全的推出会话,进程也不会退出。

4.使用screen方式
此方式实为开启了一个伪终端,进程是在伪终端中执行的,进程是通过伪终端挂载在1号进程上的

创建screen:screen -dmS screen1
查看screen列表:screen -list:
连接到某个screen:screen -r screen1
连接到screen后,正常执行命令启动进程(无需使用nohop,也不用添加&),之后使用ctrl + a + d从当前screen断开即可
5.使用setsid命令
此方式实为设置启动后的进程的父进程为1号进程来实现的:
setsid command

6.使用tmux
tmux和screen及其类似,都是使用伪终端的方式,目标进程都是挂载在伪终端中的

创建会话:tmux
退出并销毁会话(在会话中执行):输入exit 或按下ctrl + d
退出但保留会话(在会话中执行):输入ctrl + b d
接入某个会话:tmux attach -t <会话编号>
查看会话列表:tmux ls
其他tmux高阶玩法可以自行百度。
写在最后:前两天偶然想起以前的一个痛点问题,就是如果某个进程通过脚本(run.sh方式启动)或者nohup <command> &方式启动,当终端退出后如何重新查看进程的控制台输出;网上找了一通,答案都是大写的NO,不过皇天不负有心人,最后在某个犄角旮旯的角落找到了一个还能凑合使用的方案reptyr <pid>。此命令肯定是要安装的,安装完后就可以使用此命令查看目标进程的控制台输出了,但重新接入后是无法退出的,如果按下ctrl + c会终止目标进程;如果按下ctrl + z,好吧,按下这个什么反应也没有,唯一的退出方式就是右上角关闭当前终端窗口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值