Linux如何让进程在后台运行

解决办法:

参考文章:https://blog.csdn.net/jiesunliu3215/article/details/128846628

【linux系统如何用Screen命令让程序在后台运行】_linux给screen内程序执行命令-CSDN博客
 

1. nohup+& -有时候不管用

  在要处理的命令前加上 nohup ,在结尾加上 “&” 来将命令同时放入后台运行,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。也可用 “>filename 2>&1” 来更改缺省的重定向文件名。

  1. 安装命令

    yum install coreutils
    
    
2. setsid 

  在要处理的命令前加上 setsid 即可。

[root@pythontab ~]# setsid ping www.baidu.com
[root@pythontab ~]# ps -ef |grep www.baidu.com
root     31094     1  0 07:28 ?        00:00:00 ping www.baidu.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.baidu.com
[root@pythontab ~]#

3. & subshell

将一个或多个命名包含在 “()” 中就能让这些命令在子 shell 中运行中,将 “&” 也放入 “()” 内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过 jobs 来查看的。

[root@pythontab ~]# (ping www.baidu.com &)
[root@pythontab ~]# ps -ef |grep www.baidu.com
root     16270     1  0 16:13 pts/4    00:00:00 ping www.baidu.com
root     16278 15362  0 16:13 pts/4    00:00:00 grep www.baidu.com
[root@pythontab ~]#

4. Screen(我认为最好用的)

screen 允许你启动一个虚拟终端会话,并在其中运行程序。即使你断开了SSH连接或关闭了终端,这个会话和其中运行的程序也会继续在后台运行。以下是如何使用 screen 来实现这一点的基本步骤:

4.1 安装 Screen(如果尚未安装):
在大多数Linux发行版中,screen 可能已经预装了。如果没有,你可以通过包管理器来安装它。例如,在Debian或Ubuntu上,你可以使用以下命令:

sudo apt-get install screen

4.2 启动 Screen 会话:
要启动一个新的Screen会话,只需输入 screen 命令。这将开启一个新的会话,并带你进入一个新的shell。

screen

4.3 在 Screen 会话中运行你的程序:
在screen会话中,你可以像在普通终端中一样运行任何程序。例如,如果你想在后台运行一个名为 my_script.sh 的脚本,只需在screen会话中运行它:

./my_script.sh

4.4 分离 Screen 会话:
当你的程序在运行时,你可以从screen会话中“分离”,使程序继续在后台运行。要做到这一点,同时按下 Ctrl + A,然后按 D。这会将你带回到原始的shell,而screen会话和其中的程序会在后台继续运行。

4.5 重新连接到 Screen 会话:
要重新连接到一个已经存在的screen会话,可以使用以下命令:

screen -r

如果有多个screen会话在运行,你可以列出所有会话并选择一个来重新连接:

screen -ls
screen -r [会话号]


4.6 关闭 Screen 会话:
当你完成了在screen会话中运行的程序,可以通过正常退出shell(例如输入 exit 或使用 Ctrl + D)来结束会话。如果需要强制关闭会话,可以使用以下命令:

screen -X -S [会话号] quit


假设你有一个Python脚本,名为example.py,你希望它在后台持续运行。我们将使用screen命令来实现这一目标。

以下是详细的步骤和示例:

1. 安装 Screen(如果尚未安装):
在Debian或Ubuntu上,你可以使用以下命令安装screen:

sudo apt-get install screen

2. 创建一个 Python 脚本:
假设你的Python脚本是一个简单的无限循环,打印当前时间。使用你喜欢的文本编辑器创建example.py:

import time

while True:
    print("当前时间:", time.ctime())
    time.sleep(10)

3. 启动 Screen 会话:
在终端中输入screen命令来启动一个新的screen会话:

screen


4.在 Screen 会话中运行你的 Python 脚本:
在screen会话中,切换到脚本所在的目录,并运行脚本:

python3 example.py

5.分离 Screen 会话:
当脚本开始运行后,你可以从screen会话中分离出来,让脚本继续在后台运行。同时按下 Ctrl + A,然后按 D。

6.查看 Screen 会话列表:
如果你想看看哪些screen会话在运行,可以用以下命令:

screen -ls


7.重新连接到特定的 Screen 会话:
如果你有多个screen会话在运行,你可以通过会话编号来重新连接到特定的会话。比如:

screen -r [会话号]


注意调用的时候没有[]

screen -r xxxxx


关闭 Screen 会话:
当你完成工作并想要停止脚本时,重新连接到对应的screen会话。然后,你可以通过在Python脚本运行的终端中输入Ctrl + C来停止脚本。接着,退出screen会话,只需输入exit或者按Ctrl + D。
这样,你的Python脚本将在一个screen会话中在后台运行,即使你断开SSH连接或关闭终端,它也会继续运行。通过使用screen,你可以轻松地管理在后台运行的长期或持续的进程。

要在开启时记录屏幕日志

(1)启动时添加选项-L(Turn on output logging.),会在当前目录下生成screenlog.0文件。如果执行-L命令后看不到新建的日志,可能是文件读写权限不够,e.g. sudo chmod 777 filename可以修改文件读写权限。

screen -L -dmS test #启动一个开始就处于断开模式的会话,会话的名称是test
screen -r test #连接该会话,在会话中的所有屏幕输出都会记录到screenlog.0文件。

(2)不加选项-L,启动后,在screen session下按ctrl+a H,同样会在当前目录下生成screenlog.0文件。
第一次按下ctrl+a H,屏幕左下角会提示Creating logfile “screenlog.0”.,开始记录日志。
再次按下ctrl+a H,屏幕左下角会提示Logfile “screenlog.0” closed.,停止记录日志。
上面两个方法有个缺点:当创建多个screen会话的时候,每个会话都会记录日志到screenlog.0文件。screenlog.0中的内容就比较混乱了。
(3)在screen配置文件/etc/screenrc最后添加下面一行:(建议)

               1.建立日志存放目录
                  #mkdir /var/log/screen/

               2.修改配置文件,在末尾添加配置内容
                 #vi /etc/screenrc
                 logfile /var/log/screen/%t.log

                 logfile /var/log/screen/%t_%Y%m%d.log

               3.启动screen会话,保存日志
                #screen -L -t log_name -dmS screen_name

               4.监视日志

                #tail /var/log/screen/log_name.log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值