首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么bash脚本在前台作业出错后停止?

在Linux系统中,前台作业是指在终端直接运行的命令或脚本。当bash脚本作为前台作业运行时,如果出现错误导致脚本执行失败,它将停止继续执行后续的命令或代码。

这种行为是由bash的默认设置决定的。默认情况下,bash脚本在执行过程中遇到错误时会立即停止执行,并将错误信息打印到终端。这种行为是为了确保错误能够及时被发现和处理,以避免导致更严重的问题。

停止脚本执行的行为可以通过在脚本中使用一些特殊的命令或设置来改变。例如,可以使用"set -e"命令在脚本中开启"终止执行模式",这样当任何命令返回非零退出状态时,脚本就会立即停止执行。

在实际应用中,bash脚本在前台作业出错后停止执行可以帮助开发者及时发现和解决问题。当脚本执行失败时,开发者可以检查错误信息并修复相关代码或环境问题,以确保脚本能够正常执行。

推荐的腾讯云相关产品:腾讯云主机

腾讯云主机是一种基于云计算技术的虚拟服务器,可以满足各种应用场景的需求。腾讯云主机提供了灵活的配置选项,高性能的计算能力,可靠的存储空间,安全可靠的网络环境,以及丰富的管理和监控工具。

产品链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux 后台运行进程:& , nohup

当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。...,终端被该作业占据;可以在命令后面加上& 实现后台运行。...(ps -ef | grep 进程号 或者 kill -9 进程号) nohup 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。...2>&1 是将标准出错 重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。...如果将他们写到 .sh 脚本中,然后执行脚本,是显示不出来的 比如执行下面这个脚本后,jobs 显示不出来: #!

4.8K40

Linux - 请允许我静静地后台运行

& 首先是我们最经常遇到的符号 &,将它附在命令后面可以使进程在后台执行,不会占用前台界面。它实际上是在会话中开启了一个后台作业,对作业的操作我们后面再说。...而在 shell 脚本内,setsid 不是进程组长,它不会 fork() 子进程,而是由 bash 来fork() 一个子进程,而 bash 会 wait() 子进程,所以表现得像 setsid 在...我们直接开启了某个进程,又想在不中断进程的情况下让它让出前台终端; 这些都要牵涉到今天的第二个模块--作业; 我们在终端里运行的命令都可以理解为一个作业,有的占用前台终端,有的在后台默默执行,下面的命令就是为了调度这些作业...结合 ctrl+z 和 bg 命令,我们可以解决上面提出的第一个问题,不停止地将正在占用终端的进程放到后台执行。 fg fg 与 bg 相对,使用它可以把作业放到前台来执行。...一直在更新,欢迎 关注 。 参考: setsid为什么会在脚本中阻塞-StackoOerflow Linux 进程、进程组、会话周期、控制终端

1.7K50
  • 《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    但是这样可以在不终止进程的情况下能深入脚本内部一窥究竟。 Ctrl+z 会生成一个SIGTSTP信号,停止shell中运行的任何进程。...16.1.5 修改或移除捕获 在脚本中的不同位置进行不同的捕获处理,需要重新使用带有新选项的trap命令。 修改了信号捕获后,脚本处理信号的方式就会发生变化。 也可以删除以及设置好的捕获。...那么值钱带减号的就变成默认作业了。 16.4.2 重启停止的作业 可以将已停止的作业作为后台进程或前台进程(会接管你当前工作的终端)重启。 用bg命令实现。 bg 加上作业号。...不加作业号可以重启默认作业。 当有多个作业时必须加上作业号。 实例: ? Ctrl + Z停止作业。 注意:bg 重启后是后台作业,ctrl + c 是接受不到的。...以前台模式重启作业,可用带作业号的fg命令。 比如:fg 2 例子就像上面一样,把bg换成fg就好了。 16.5 调整谦让度 在多任务操作系统中,内核负责将cpu时间分配给系统上运行的每一个进程。

    3K61

    Tomcat 进程意外突崩,元凶居然是它...

    有了这个线索之后,银时同学立刻看了一下对方测试环境的脚本,简化后如下: $ cat test.sh #!/bin/bash cd /data/server/tomcat/bin/ ....交互模式与非交互模式对作业控制(job control)默认方式不同 为什么在交互模式下shell不会对后台进程处理SIGINT信号设置为忽略,而非交互模式下会设置为忽略呢?...还是比较好理解的,举例来说,我们先某个前台进程运行时间太长,可以ctrl-z中止一下,然后通过bg %n把这个进程放入后台,同样也可以把一个cmd &方式启动的后台进程,通过fg %n放回前台,然后在ctrl-c...而非交互模式下,通常是不需要作业控制的,所以作业控制在非交互模式下默认也是关闭的(当然也可以在脚本里通过选项set -m打开作业控制选项)。...如果我们在test.sh里设置开启作业控制的话,就不会让java进程退出了 #!/bin/bash set -m cd /home/admin/tt/tomcat/bin/ .

    1.1K10

    Tomcat进程意外退出,元凶居然是他...

    有了这个线索之后,银时同学立刻看了一下对方测试环境的脚本,简化后如下: $ cat test.sh #!/bin/bash cd /data/server/tomcat/bin/ ....交互模式与非交互模式对作业控制(job control)默认方式不同 为什么在交互模式下shell不会对后台进程处理SIGINT信号设置为忽略,而非交互模式下会设置为忽略呢?...还是比较好理解的,举例来说,我们先某个前台进程运行时间太长,可以ctrl-z中止一下,然后通过bg %n把这个进程放入后台,同样也可以把一个cmd &方式启动的后台进程,通过fg %n放回前台,然后在ctrl-c...而非交互模式下,通常是不需要作业控制的,所以作业控制在非交互模式下默认也是关闭的(当然也可以在脚本里通过选项set -m打开作业控制选项)。...如果我们在test.sh里设置开启作业控制的话,就不会让java进程退出了 #!/bin/bash set -m cd /home/admin/tt/tomcat/bin/ .

    4.1K10

    从进程组、会话、终端的概念深入理解守护进程

    当我们在命令行提示符后输入类似./helloworld程序时,在程序运行时终端被占用,此时无法执行其它操作。即使使用....) ps:进程和进程组ID都是 10263,父进程是 bash(10179),因为是在 Shell 上执行的命令 cat:进程组 ID 与 ps 的进程组 ID 相同,父进程同样是 bash(10179...) 容易理解 Bash 就是Shell进程,Shell 父进程是 sshd;ps 与 cat 通过管道符号一起运行,属于一个进程组,其父进程都是 Bash;一个进程组也被称为「作业」。...会话可以有一个进程组称为会话的「前台作业」,其它进程组为「后台作业」 一个会话可以有一个控制终端,当控制终端有输入和输出时都会传递给前台进程组,比如Ctrl + Z。...会话的意义在于能将多个作业通过一个终端控制,一个前台操作,其它后台运行。

    1.1K20

    linux基础(day24)

    8.6 管道符和作业控制 管道符、作业控制 ctrl z //暂停一个任务 jobs //查看后台的任务 bg [id] //把任务调到后台 fg [id] //把任务调到前台 命令后面加&直接丢到后台...(丢到后台去了),回到命令行界面,去操作其他的任务 fg 命令可以把丢在后台的命令,调回前台 可以控制多个任务,将他们暂停掉 jobs 命令,可以把暂停的任务列出来 暂停多个任务后,并会显示停止的任务列出来...1.txt [2]+ 已停止 vim 2.txt [root@localhost ~]# fg [id] 命令,把任务调到前台并执行——>不加id号就是执行最后一次的任务...)去运行 在结束任务的时候,必须是在前台才能结束——>(否则在后台是无法结束任务的) sleep 1000 命令,暂停一千秒,什么事都不做,一千秒之后把命令窗口恢复回来 [root@localhost...profile,profile又会自动的调用bashrc bashrc是执行shell脚本的时候,用户不用登录,就可以直接执行shell脚本,执行shell脚本就会调用bashrc里面的一些配置 -系统中的

    54410

    使用 Ctrl+S停止输出而不用挂起前台进程

    之前一直知道使用 Ctrl+Z 挂起前台进程来阻止进程运行,之后可以再通过 shell 的作业控制 (jobs / fg N) 来将后台进程切换为前台,从而继续运行。.../deadloop.sh > 首先可以看到重启后的输出序号与重启前的可以接上,所以中间并没有输出丢失,也就是说是进程被暂停了,而不只是输出停止了。...另一方面,我们启动 stap 探测进程间信号的收发,可以在 Ctrl+Z 停止进程时收到以下的输出: stap_signal.sh 22       events/3         16688 usleep...write 系统调用,后者停止在了 waitpid 系统调用。...如果再打开 IXANY 标志位,则使用任意键都可以重启被停止的输出,而不一定要使用 Ctrl+Q。 最后,还有一个隐藏的前提,就是被暂停的进程在前台有频繁的输出,否则 Ctrl+S 也无用武之地。

    72220

    什么是守护进程?

    在了解守护进程之前,需要先知道什么是什么是终端?什么是作业?什么是进程组?什么是会话?...shell分前后台作业来控制的不是进程而是作业。一个作业由多个进程组成。Shell可以运行一个前台作业和任意多个后台作业,称为作业控制。bash就是一个独立的作业。...一个会话中,有一个前台作业和若干个后台作业。会话SID是会话手进程的PID。 为什么只能运行一个前台作业?...当我们在前台新起了一个作业,shell就被提到了后台,因此shell就没有办法再继续接受我们的指令并且解析运行了。...setsid() 调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。

    1.1K20

    是不是Bash编程老司机,看完这10条细节就知道了

    针对 Bash 中一些极容易出错的细节,我们在这里总结了 10 条编程注意事项,希望对各位泛 Linux 环境的开发者有所裨益。...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...因此为了保证代码的安全性和正确性,我们可以在代码中用 set -e 对 Bash 环境进行一些额外设置,-e 表示出现错误就停止。...这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。

    1.1K71

    【Linux】进程间关系与守护进程

    每当我们通过Xshell客户端正确的登录到Linux系统后,系统会给我们创建一个终端文件,并且配套一个bash进程(进程组的形式)!我们写的命令写入到终端文件,然后通过bash进程执行在返回结果。...通常我们执行程序,都是在前台进行运行的。当我们在启动程序后加入&就会在后台运行程序。 在同一个会话中可以运行同时存在多个进程组,但是,任何时刻,只允许一个前台进程组,可以运行多个后台进程组!...前台运行 Foreground 作业在前台执行,用户必须等待其完成后才能进行其他操作。 已完成 Completed 作业成功执行完毕。 已终止 Terminated 作业因错误或其他原因被强制终止。...等待中 Waiting 作业正在等待系统资源或其他作业的完成。 在Linux中,作业状态的产生如下: 运行中 (Running):作业启动后立即执行。如果作业是前台作业,它将直接占用命令行界面。...停止 (Stopped):作业自然完成或因错误结束。 后台运行 (Background):命令后加&或使用bg命令。 前台运行 (Foreground):默认启动方式或使用fg命令。

    12810

    Bash 老司机也可能忽视的 10 大编程细节

    针对 Bash 中一些极容易出错的细节,我们在这里总结了 10 条编程注意事项,希望对各位泛 Linux 环境的开发者有所裨益。...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...活用 set 命令 在其他语言中,通常遇到错误的语句时,编译器就会报错并停止运行,但 Bash 不会。...因此为了保证代码的安全性和正确性,我们可以在代码中用 set -e 对 Bash 环境进行一些额外设置,-e 表示出现错误就停止。...这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。 来源:jvns.ca

    88060

    8.6 管道符和作业控制

    管道符、作业控制 ctrl z //暂停一个任务 jobs //查看后台的任务 bg [id] //把任务调到后台 fg [id] //把任务调到前台 命令后面加&直接丢到后台 管道符的使用 管道符 |..../.bash_profile ./.bashrc ./.cshrc ./.tcshrc ....(丢到后台去了),回到命令行界面,去操作其他的任务 fg 命令可以把丢在后台的命令,调回前台 可以控制多个任务,将他们暂停掉 jobs 命令,可以把暂停的任务列出来 暂停多个任务后,并会显示停止的任务列出来...)去运行 在结束任务的时候,必须是在前台才能结束——>(否则在后台是无法结束任务的) sleep 1000 命令,暂停一千秒,什么事都不做,一千秒之后把命令窗口恢复回来 [root@localhost...^Z [2]+ 已停止 sleep 200 在调到前后台运行的时候,不指定id号,就是默认最后一条执行命令 & 符号,把任务丢到后台去执行 [root@localhost

    31610

    Linux 中前台进程转后台,并重定向输出

    有时候我们直接在终端中执行了命令,等待很长时间后发现还需要很久才能执行完,又不想一直开着终端等待结果,可以按照下面的方式,将前台进程转至后台,并重定向输出内容至文件,以便随时连接回来查看执行状态。...示例程序 假设我们需要执行很久的任务是下面这段脚本:每隔五秒打印一段内容至控制台。...前台任务转后台任务 先按 Ctrl+z 中断当前任务: ... Press Ctrl+C to stop. ^Z [1]+ 已停止 ..../test.sh 查看当前 shell 会话中所有正在运行或被停止(suspended)的后台作业的列表: $ jobs [1]+ 已停止 ..../test.sh 使用 bg %n 将指定的停止的后台作业切换到后台运行。%n 是作业编号,例如 bg %1 将作业编号为 1 的作业切换到后台运行。 $ bg %1 [1]+ .

    48410

    程序计划任务管理

    0x01 后台执行 bg 命令 描述:用于将作业放到后台执行(backgroud)使前台可以执行其他任务,该命令的运行效果与在指令后面添加&符号;的效果是相同的,都是将其放到系统后台执行....-bash: bg: 任务已经终止 [1]+ 完成 find / -name password 注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行...fg 命令 描述:用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行,与bg命令一样若后台任务中只有一个,则使用该命令时可以省略任务号;如果有多个任务可以fg加任务编号调用fg 1 frontground...; fg %工作号 #%工作号的%号可以省略,是工作号不是PID号 ( 作业标识:指定要放到前台的作业标识号 ) 基础示例: #示例1.使用fg命令将任务号为1的任务从后台执行转换到前台执行,输入如下命令...脚本 #修改后的Cron表达式即可完美解决问题 * */4 * * * ?

    3.3K20

    Linux 前后台作业切换及脱机管理

    Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。...所有的上述的这些工作我们可以在一个bash内实现,也就是说在同一个终端窗口完成。下面主要描述了Linux下前后台作业切换与管理以及作业在脱机的情形下如何管理。...无论是前台作业还是后台作业,两者都来自当前的shell,是当前shell的子程序。    下面是两者的定义。    前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。   ...n      让后台运行的作业n切换到前台来    d、bg %n      让指定的作业n在后台运行    e、kill %n    移除指定的作业n    "n" 为jobs命令查看到的job编号,...00:00:00 /bin/bash .

    1.1K10

    linux 后台运行方法总结

    为什么 该现象与SIGHUP信号有关 在POSIX-compliant平台(Solaris,MacOS 等)[1]上,当终端logout时,该终端下所有进程会收到SIGHUP信号 在Android, FreeBSD...23:02 pts/12 00:00:00 grep --color=auto receive_signal 查看 receive_signal.txt 已捕捉到SIGHUP信号,并且任务进程已停止.... &) 将一个或多个命名包含在“()”中可以使这些命令在子shell 中运行中,将"&"也放入“()”内之后,可实现子shell脱离当前终端,从而摆脱当前终端SIGHUP信号影响 Tips: ()经常在脚本中做目录切换时使用...0 00:02 pts/11 00:00:00 grep --color=auto receive_signal disown 对于已经在运行的任务,nohup和setsid明显已经不适用,可通过作业调度和...,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。

    3.8K20
    领券