Linux下几种运行后台任务的方法

在Linux系统中,执行后台任务的方法可以帮助程序员避免通过断网、屏幕关闭或执行Ctrl+C操作进行终端操作等方式断开ssh连接,从而防止正在运行的程序退出导致进程失败。
它会产生影响。
下面我们介绍几种常见的执行后台任务的方法。
方法一:执行命令时使用“&”符号在命令末尾添加“&”符号可以使程序忽略SIGINT信号(通常是Ctrl+C)。
C用于关闭进程,程序的执行并不停止。
但当屏幕关闭、网络掉线等操作导致ssh终止时,程序仍然可以退出。
方法2:使用nohup命令nohup(nohangup)命令用于启动一个不会因SSH挂起而停止运行的命令。
nohup捕获并忽略SIGHUP信号,因此即使屏幕熄灭、网络断开等导致ssh终止,程序也不会退出。
不过,Ctrl+C仍然可以关闭该进程。
为了进一步防止所有中断,可以将nohoop与“&”结合使用,此时无法通过使用Ctrl+C并关闭终端来关闭进程。
所有输出通常都重定向到名为nohup.out的文件。
方法三:使用Ctrl+z、jobs、fg、bg组合如果程序启动时没有使用“&”,可以使用Ctrl+z暂停前台进程,切换到后台。
jobs命令用于查看当前有多命令在后台运行。
bg命令继续在后台运行被阻止的作业。
fg命令将后台作业移动到前面以继续运行。
方法四:使用screen命令Screen是一个提供后台程序功能的软件,用于在Linux系统中启动和运行其他后台程序。
当直连终端ssh断开连接时,程序会维持一个ssh认为一直连接的状态,以防止进程收到断开信号而退出。
通过这些方法,程序员可以在Linux环境下动态执行和管理后台任务,避免终端操作导致进程意外退出,保证作业的连续性。

在linux系统下让进程在后台运行的方法

在Linux中,如果您希望该进程在后台运行;一般我们只要在命令后面加上&即可;实际上,这会将命令添加到作业队列中:$./test.sh&[1]17208$jobs-l[1]+17208Running./test.sh&对于在底部执行的命令;要在后台重新运行它们,请先按ctrl+z,然后使用bg命令停止它们。
就是这样。
添加要在后台运行的作业:$./test.sh[1]+Stopped./test.sh$bg%1[1]+./test.sh&$jobs-l[1]+22794Running./test.sh&但例如,在上面后台运行的进程中;它的主要进程仍然是当前终端shell的进程。
一旦父进程退出;挂断信号将被发送到所有子进程。
子进程也将运行。
接受挂断并退出。
如果您想在退出shell时继续该过程,我们需要使用nohup来忽略挂断信号;或setsid=父进程init进程(进程号1)$echo$21734$nohup./test.sh&[1]29016$ps-ef|greptest5152971021734011:47pts/1200:00:00/bin/sh./test.sh5152971321734011-47pts/1200:00:00greptest$setsid./test.sh&[1]409$ps-ef|greptest5154101011:49?00:00:00/bin/sh./test.sh51541321734011:49pts/1200:00:00greptest上面测试的是当前shell退出演示使用nohup/setsidplus在后台运行进程而不受影响。
因此,您可以使用disown命令来终止已在后台运行的进程:$./test.sh&[1]2539$jobs-l[1]+2539Running./test.sh&$disown-h%1$ps-ef|greptest5154101011:49?00:00:00/bin/sh./test.sh515254221734011:52pts/1200:00:00greptest即使该进程在分区上运行。
它与setsid相同。
方法这很简单;附上命令():$./test.sh&)$ps-ef|greptest5154101011:49?00:00:00/bin/sh./test.sh5151248321734011:59pts/1200:00:00greptest注:测试环境本文的内容是RedHatEnterpriseLinuxASrelease4(NahantUpdate5)的一个shell。
/bin/bash不同的操作系统和shell可能有不同的命令。
例如,虽然AIX的ksh并不否认可以使用nohup-pPID达到与deny相同的效果。
还有一种更强大的屏幕使用方式;首先,创建一个断开模式的虚拟终端;然后使用-r选项重新连接虚拟终端。
$screen-dmSscreen_test$screen-listThereisascreenon-27963.screen_test(Detached)1Socketin/tmp/uscreens/S-jianfeng.$screen-rscreen_test当你需要在后台连续运行命令时。