IDC资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回IDC资讯列表

Linux中使用nohup与screen运行后台任务的区别是什么

发布时间:2022-05-31

Linux中使用nohup和screen运行后台任务有什么区别?很多新手对此不是很清楚。为了帮助您解决这个问题,桂哥网络将在下面向您详细解释。有这方面需求的人可以借鉴一下,希望你能有所收获。

使用SSH终端(如putty、xshell)连接Linux服务器运行耗时的任务,可能需要几个小时甚至几天才能完成。这个时候终端被占用了,我们还要做其他任务。所以我们需要把这种费时的任务放到后台去运行,只要做好日志就可以了。实现这一要求有以下几种常用方法。

command

在终端,输入要运行的命令。此时,使用Ctrl C中止命令将无效,因为程序在后台运行时对SIGINT1信号免疫后会继续运行。但如果直接关闭终端,流程就会终止。可以看到后台运行的进程会被SIGHUP2信号停止,但是如果使用exit命令正常退出终端,程序会继续在后台运行而不停止。

nohup command

默认情况下,标准输出将被追加到当前目录中的nohup.out。如果当前目录中的nohup.out文件不可写,输出将被重定向到$HOME/nohup.out文件。

然后,很容易想到将这两个特性结合起来运行如下命令:

nohup命令/home/user/myfile.log 21

这样,这个任务将在后台执行,直到完成,程序的标准输出(1)标准错误(2)将被定向到/home/user/myfile.log文件。

screen工具

屏幕可以理解为一个会话窗口管理工具。对于一般用途,我们只需要使用以下操作:

#使用yum安装屏幕

yuminstallscreen

#创建名为test的会话窗口

屏幕-Stest

#暂时离开窗口

Ctrl ad(即按住Ctrl,然后按a和d)

#查看现有会话窗口

屏幕-ls

#进入窗口

屏幕显示

屏幕显示进程标识

#关上窗户

退出

#窗口切换

在当前屏幕会话中创建一个窗口

Ctrl aw:窗口列表

ctrl+an:下一个窗口

Ctrl ap:上一个窗口

Ctrl a0-9:在第0个窗口和第9个窗口之间切换。使用屏幕工具,我们可以在终端上创建一个窗口,然后运行所需的命令,然后离开,然后我们可以继续做其他事情。当然,我们也可以使用其他终端来连接服务器,然后使用screen -r命令来连接所需的窗口。我们会发现程序一直在运行,退出终端不会影响那些离开终端上运行的程序。

测试:

我们写一个测试脚本。

#!/bin/sh

for((I=1;i1000I))

d=`日期' %Y-%m-%d%H:%M:%S ' '

Echo'$d的$i输出;'

电汇

sleep2s

巴什只使用后台运行:

[root@localhosttest.cc]#。/test.shtest.log21

[1]15037

[root @ localhosttest . cc]# PS-aux | greptest . sh

root 150370 . 00 . 01131801424 pt/0s 16:100:00/bin/sh。/test.sh

root 150450 . 00 . 0112712992 pts/0S 16:100336000 grep-color=auto test . sh

Bash可以看到15037进程正在运行;

如果终端直接关闭,日志记录将停止,这意味着进程将随着终端会话的结束而停止执行。

但是经过反复测试,发现如果使用exit命令正常退出终端,然后连接到终端,运行的程序会继续运行,也就是命令的效果和nohup一样,我这里使用的测试环境是CentOS7.6。

使用nohup 运行

[root@localhosttest.cc]#nohup。/test.shtest.log21

[1]14349根据测试结果,如果终端直接关闭或使用退出命令退出终端,程序将继续执行。

使用screen运行

#创建窗口

屏幕-Stest

#运行命令,这里不需要后者,但是程序会占用窗口。/test.shtest.log21

#暂时离开

Ctrl ad此时可以直接关闭终端,然后重新连接,发现程序还在运行。如果您想找到窗口连接:

#现有窗口

[root@localhost~]#screen-ls

屏幕:

18048 .测试(分离)

1 socketin/var/run/screen/S-root。

#进入窗口

输入[root@localhost~]#screen-rtest后,会发现窗口保持在离开前的状态,包括之前输入的程序和命令。当你在窗口中输入exit命令退出窗口时,如果不使用前面的命令,程序就会被中止,因为相对于测试窗口,它是一个前台程序,当窗口退出时程序就会被中止。

由于屏幕的临时离开功能,前台程序可以在临时离开窗口中保持运行,与真实终端相比相当于在后台运行。

当用户键入INTR字符(通常是Ctrl-C)时,程序中断信号被发送,用于通知前台进程组终止进程。

在终端连接结束时发送,通常关闭终端并通知同一会话中的每个进程组

阅读以上内容对你有帮助吗?如果您想了解更多相关知识或阅读更多相关文章,请关注桂哥网络,感谢您对桂哥网络的支持


TikTok千粉号购买平台:https://tiktokusername.com/