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

如何重复启动和终止一个永不结束的bash进程

要重复启动和终止一个永不结束的bash进程,可以使用以下方法:

  1. 使用循环结构:可以使用while循环来实现重复启动和终止一个永不结束的bash进程。首先,在bash脚本中使用无限循环,例如:
代码语言:txt
复制
while true; do
    # 启动需要执行的命令或进程
    your_command_here
done

在上述代码中,your_command_here代表需要执行的命令或进程。

  1. 使用后台运行:可以将需要执行的命令或进程放在后台运行,并使用循环结构来实现重复启动。例如:
代码语言:txt
复制
while true; do
    # 启动需要执行的命令或进程,并将其放在后台运行
    your_command_here &
    # 等待一段时间
    sleep 1
    # 终止之前启动的命令或进程
    kill %1
done

在上述代码中,your_command_here代表需要执行的命令或进程,sleep 1表示等待1秒,kill %1表示终止之前启动的命令或进程。

  1. 使用无限循环和信号处理:可以使用无限循环和信号处理来实现重复启动和终止一个永不结束的bash进程。例如:
代码语言:txt
复制
#!/bin/bash

# 定义信号处理函数
function cleanup {
    # 终止之前启动的命令或进程
    kill $pid
    exit
}

# 注册信号处理函数
trap cleanup SIGINT SIGTERM

# 无限循环
while true; do
    # 启动需要执行的命令或进程,并将其放在后台运行
    your_command_here &
    # 记录进程ID
    pid=$!
    # 等待信号
    wait $pid
done

在上述代码中,your_command_here代表需要执行的命令或进程,trap cleanup SIGINT SIGTERM用于注册信号处理函数,kill $pid用于终止之前启动的命令或进程。

以上是三种实现重复启动和终止一个永不结束的bash进程的方法。具体使用哪种方法取决于实际需求和场景。

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

相关·内容

Java 在 Linux 上的守护进程:如何优雅地终止和管理自启动程序??

本期文章我们将转向实际的 Java 应用部署场景,探讨 如何在 Linux 环境下管理 Java 守护进程以及终止自启动程序。守护进程作为后台运行的程序,对于系统稳定性和应用的持续运行至关重要。...然而,守护进程一旦启动,如何在不中断系统其他服务的情况下优雅地终止它们则是一个需要仔细考虑的问题。...守护进程的启动和关闭需要严格的控制,以确保系统的稳定性和数据的安全性。对于自启动程序,特别是自动运行的守护进程,如何在需要时优雅地终止这些程序非常重要。源码解析1....&:将进程放入后台执行。守护进程的启动相对简单,然而,如何终止它们往往需要更细致的处理。3....我们展示了如何通过 nohup 等工具启动 Java 守护进程,以及如何优雅地通过 kill 命令终止自启动程序,确保进程能够安全地结束而不会导致数据丢失或系统不稳定。

12321

如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程也返回一个非零的退出码?

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?...回答 根据 Luca Tettamanti 和 Gabriel Staples 的回答,编写一个完整的可以运行的演示代码: #!...# 存储上一个子进程启动的 pid echo " pid = ${pids[$i]}" done for pid in $pids; do wait $pid rc=$?

11600
  • Erlang 01 - 子进程规范

    子进程规范 子进程规范是一个用于描述监督者管理的进程的元组. 对于大多数监督者而言, 子进程会随监督者的启动而启动, 并在监督者的生命周期结束时退出....ID, 是一个用于在系统内部标志各规范的项式. 为了简单起见, 我们可以采用模块名. Start, 是一个用于启动进程的三元组{Module, Function, Arguments}....取值可以为: permanent: 无论处于任何原因导致进程终止都应该重启进程. temporary: 永不重起进程. transient: 仅在进程意外终止时重启进程....Shutdown, 用于指明如何终止进程, 取值可以为: 整型: 表示终止进程时应采用软关闭策略, 给进程留出一段自我了断的时间(以毫秒为单位), 如果进程未能在指定时间内自行退出, 将被无条件终止...brutal_kill: 表示在关闭监督进程时立即终止子进程. infinity: 主要用于子进程本身也同为监督者的情况, 表示应给予子进程充分的时间自行退出.

    1K60

    「走进k8s」Kubernetes1.15.1必备知识 Pod 的钩子(18)

    由 kubelet 发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。 ①PostStart 容器创建成功后,运行前的任务,用于资源部署、环境准备等。异步非堵塞。...docker stop命令,docker会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认超时时间(30s),会继续发送SIGKILL...的系统信号强行kill掉进程。...在节点上,被设置了立即结束的的pod,仍然会给一个很短的优雅退出时间段,才会开始被强制杀死。...PS:为了掩饰所以提供了挂载方便查看删除后的优雅处理输出了一段话,但是实际的生产中最好的方式就是关闭容器的服务。PostStart 和 PreStop的使用方法其实不难。

    1.7K31

    Docker竟有这些不为人知的bug

    这个最顶端的进程就是初始进程,其在启动系统时被内核启动,并负责启动系统的其余功能部分。如:SSH 后台程序、Docker 后台程序、Apache/Nginx 和 GUI 桌面环境等等。...手册里是这样描述地: "一个已经终止但并未被“等待”的进程,就成为了一个“僵尸”。...但还有一种特殊情况——如果父进程终止了,无论是正常的(程序逻辑正常终止),还是用户操作导致的(比如用户杀死了该进程)——子进程会如何处理?...任何一个进程在结束时,都会预期初始进程能够清理(「领养」和“收割”)其子进程。这一点,在《操作系统概述》和《Unix 系统高级编程》两书中描述地非常详细。...对 Docker 的影响 这个问题会如何对 Docker 产生怎样的影响?我们可以看到很多人只在他们的容器中跑一个进程,而且也认为只需要跑这么一个进程就足够了。

    4.1K10

    linux的进程介绍与前后台任务切换

    因为每个进程都有一个 PID ,那某个进程的父进程该如何判断? 就透过 Parent PID (PPID) 来判断即可。...当然我们可以 重复登入那六个文字接口的终端机环境中,不过,能不能在一个 bash 内达成? 当然可以啊!就是使用 job control!...#不过在这个案例中, vim 的工作无法被结束喔!因为他无法透过 kill 正常终止的意思!...因为你知道如何正常结束该进程不是吗? 通常使用 -9 是因为某些程序你真的不知道怎 么透过正常手段去终止他,这才用到 -9 的! 其实,kill 的妙用是很无穷的啦!...您可以自由的转载和修改,但请务必注明文章来源和作者署名并说明文章非原创且不可用于商业目的。

    1.5K30

    Linux基础之进程 原

    操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。 3、如何产生进程? 执行一个程序或命令就可以启动一个进程。...进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。 #Linux启动的第一个进程。...僵尸进程(状态:Z )通常造成僵尸进程的原因是该进程应该已经执行完毕,或者是因故障应该要终止,但该进程的父进程却无法完整、有效的将进程结束掉,而造成进程一直存在内存当中。...用man 7 signal可知: -15:以正常的程序方式终止一个进程!!! -9:立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程) -2:代表由键盘输入 [ctrl]-c 同样的动作。...向syslogd这个命令启动的进程发送一个SIGHUP信号 [root@localhost ~]# killall -9 syslogd 强制终止所有以httpd启动的进程 [root@localhost

    65250

    守护进程

    bash提到前台 bg 3再把3号进程启动起来 session(进程会话) 在Linux中,session(会话)通常指的是与用户交互的一个环境,它是系统中与某个用户交互的一系列活动的集合。...进程会话的特征包括: 每个进程在启动时都会被分配一个会话ID。 会话通常由一个进程创建,称为会话领导进程。 会话通常用于进程组管理,特别是在控制终端和后台进程之间的交互。...会话的管理由setsid()系统调用进行,当进程调用setsid()时,它会创建一个新的会话,并成为该会话的领导进程 前台任务和后台任务比较好 本质 任务里有多个进程组 每多建一个就多一个 绘画和终端都关掉了...,那些任务仍然在 bash也退了,然后就托孤了 受到了用户登录和退出的影响 守护进程化---不想受到任何用户登陆和注销的影响 如何做到(setsid)(创建新会话) 怎么保证自己不是组长 守护进程本质(...SIGTERM (Termination signal) 作用:请求进程终止的信号。系统或其他进程通常会发送此信号来请求进程优雅地结束。

    7210

    Linux进程间通信【命名管道】

    服务端启动后,因为是读端,所以会阻塞等待 客户端(写端)写入数据 客户端写入数据时,因为 '\n' 也被读取了,所以要去除此字符 通信结束后,需要服务端主动删除管道文件 unlink 命令管道文件名 /...,无论字符串大小写,都能进行比较 运行效果: 所以 挂了名之后的命名管道是如何实现独立进程间 IPC 的呢?...1.2、命名管道的工作原理 把视角拉回文件系统:当重复多次打开同一个文件时,并不会费力的打开多次,而且在第一次打开的基础上,对 struct file 结构体中的引用计数 ++,所以对于同一个文件,不同进程打开了...A 写文件,即 IPC 因为命名管道适用于独立的进程间 IPC,所以无论是读端和写端,进程 A、进程 B 为其分配的 fd 是一致的,都是 3 如果是匿名管道,因为是依靠继承才看到同一文件的,所以读端和写端...bash 会等待命令输入,将输入源换成命名管道读端,再创建一个独立进程,作为命名管道的写端,此时就可以实现远程遥控进程,执行不同的指令 这里直接用之前写好的 简易版 bash,关于 简易版 bash

    40020

    shell脚本快速入门之-----深入介绍Expect免交互

    免交互:自动化处理的前提条件 一、Expect概述 Expect是建立在tc|基础.上的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shelI脚本中不可交互的问题。...yes 自动发送指令 send:向进程发送字符串,用于模拟用户的输入 不能自动回车换行,一般要加\r(回车) expect expect的一个内部命令,判断上次输出结果里是否包含指定的字符串...,如果有则立即返回,否则就等待超时时间后返回 只能捕捉由spawn启动的进程的输出 spawn:启动进程,并跟踪后续交互信息 **interact:**执行完成后保存交互状态,把控制权交给控制台...Expect脚本可以接受从bash传递的参数,可以使用 [lindex argv n] 获得,n从0开始,分别表示第一个1,第二个2,第三个3……参数 argvn没有空格则表示脚本名称 ; argv...由spawn启动的命令在结束时会产生一个eof标记,expect eof 即在等待这个标记 三、Expect语法 send命令不具备回车换行功能,一般要加 \r 或 \n 单一分支语法 expect

    2.4K31

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

    停止进程  9    SIGKILL    无条件终止进程 15    SIGTERM   尽可能终止进程 …… 默认情况下,bash shell会忽略收到的任何SIGOUT(3)和SIGTERM(15...有时打开了一个关键的系统文件锁,这就比较危险了。 但是这样可以在不终止进程的情况下能深入脚本内部一窥究竟。 Ctrl+z 会生成一个SIGTSTP信号,停止shell中运行的任何进程。...16.2.2 运行多个后台作业 同时启动多个后台作业就可以了。 在终端会话中使用后台进程要注意,ps命令的输出中,每一个后台进程都和终端会话(pts/0)终端联系在一起。...16.4 作业控制 重启停止的进程需要向其发送一个SIGCONT信号。 启动、停止、终止、恢复作业这些功能统称为作业控制 16.4.1 查看作业 jobs命令允许查看shell当前正在处理的作业。...anacron不会处理执行时间需求小于一天的脚本 16.6.3 使用新的shell启动脚本 如果每次运行脚本的时候都能够启动一个新的bash shell,将会非常的方便。

    3K61

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

    每当我们通过Xshell客户端正确的登录到Linux系统后,系统会给我们创建一个终端文件,并且配套一个bash进程(进程组的形式)!我们写的命令写入到终端文件,然后通过bash进程执行在返回结果。...我们来看看系统是不是会在我们登录时创建一个终端文件,并且配套一个bash进程 可以看到我们每次打开一个新的的会话,就会产生一个对应的bash文件!...前台运行 (Foreground):默认启动方式或使用fg命令。 已完成 (Completed):作业成功执行完毕。在这个状态下,作业已经结束,不再运行。...已终止 (Terminated):作业由于接收到终止信号(如SIGTERM或SIGKILL)而被强制结束。 等待中 (Waiting):作业等待资源或事件。...5 守护进程 守护进程,又称为Daemon:守护进程是一种在操作系统后台运行的进程,它通常在系统启动时开始运行,并在系统关闭时终止。它独立于任何控制终端,不会因为用户登录或注销而受到影响。

    12810

    容器中的一号进程

    如何理解 init 进程? linux 进程在树中排序。每个进程都可以产生子进程,并且除了最顶层的进程之外,每个进程都有一个父进程。...一旦我们启动了多个进程,那么容器里就会出现一个 pid 1,也就是我们常说的 1 号进程或者 init 进程,然后由这个进程创建出其他的子进程。接下来,我带你梳理一下 init 进程是怎么来的。...换句话说,给 Bash发送SIGTERM信号终止时,会等待十秒钟,然后被内核强制终止包含所有进程的整个容器。这些进程通过 SIGKILL 信号不正常地终止。...为什么docker中会有僵尸进程? 使用容器的理想境界是一个容器只启动一个进程,但这在现实应用中有时是做不到的。...一旦我们启动了多个进程,那么容器里就会出现一个 pid 1,也就是我们常说的 1 号进程或者 init 进程,然后由这个进程创建出其他的子进程。

    1.8K60

    关于 Linux 中使用 systemd-run 创建临时 cgroup 限制 ad-hoc 资源消耗的一些笔记

    service : 一个或一组进程,由 systemd 依据单位配置文件启动。service 对指定进程进行封装,这样进程可以作为一个整体被启动或终止。 scope : 一组外部创建的进程。...由强制进程通过 fork() 函数启动和终止、之后被 systemd 在运行时注册的进程,scope 会将其封装。例如:用户会话、 容器和虚拟机被认为是 scope。...slice : 一组按层级排列的单位。slice 并不包含进程,但会组建一个层级,并将 scope 和 service 都放置其中。真正的进程包含在 scope 或 service 中。...前台进程 同步进程 前台进程一种是需要设置 --scope,指定为一个scope资源,除非命令运行结束或者强制执行,否则会一直挂在前台 ┌──[root@liruilongs.github.io]-[~...--now 已终止 后台进程 后台非守护进程 后台非守护进程不需要 --scope 参数,在后台执行,默认是一个 service ┌──[root@liruilongs.github.io]-[~]

    77830

    【Linux】进程控制

    表示的是父进程bash获取到的最近一个子进程退出的退出码(子进程的return值)。...2、4、如何终止 1、main函数return,表示进程终止(非main函数,return,函数结束) 2、代码调用exit函数(注意:在代码的任意位置调用exit,都表示进程终止) 3、_exit—system...3、2、进程如何等待 wait:等待成功时,返回子进程的pid。作用是等待任意一个子进程的退出 如果子进程没有退出的话,父进程就会在阻塞等待。...(上面的两种是阻塞等待) 如果设置了选项WNOHANG,而调度中waitpid发现没有已退出的子进程可收集,则返回0,不过还需要后续的重复等待(此时是非阻塞等待) 参数: pid: Pid=-1...这样的状态就像是张三是一个父进程,一直在等待着李四的子进程运行结束,结束了张三才能继续他自己原本的事情。

    7110

    Linux学习笔记之Centos7 自定义systemctl服务脚本

    *.service   # 服务unit文件 *.target     # 开机级别unit   CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[...# 以ExecStart字段启动的进程为主进程 forking: # ExecStart字段以fork()方式启动,此时父进程将退出,子进程将成为主进程(后台运行)。...信号后启动 notify: # 类似于simple, 启动结束后会发出通知信号,然后systemd再启动其他服务 idle: # 类似于simple,但是要等到其他任务都执行完...非正常退出时,重启,包括被信号终止和超时等 on-abnormal: # 只有被信号终止或超时,才会重启 on-abort: # 只有在收到没有捕捉到的信号终止时,才会重启...如果想支持bash语法,需要设置Tyep=oneshot ExecStart: # 启动服务时执行的命令 ExecReload: # 重启服务时执行的命令 ExecStop

    3.1K30

    Linux 信号(Signal)

    SIGHUP 运行在终端中,由 bash 启动的进程,都是 bash 的子进程。终端退出结束时会向 bash 的每一个子进程发送 SIGHUP 信号。...由于 SIGHUP 的缺省行为是 Term,因此,即使运行在后台的进程也会和终端一起结束。...由于作为父进程的 bash 进程已经结束,因此 /sbin/init 就成为孤儿进程新的父进程。...SIGINT, SIGQUIT, SIGTERM 和 SIGKILL SIGTERM 和 SIGKILL 是通用的终止进程请求,SIGINT 和 SIGQUIT 是专门用于来自终端的终止进程请求。...会话是用户登录系统到退出的所有活动,从登录到结束前创建的所有进程都属于这次会话。会话有一个前台进程组,还可以有一个或多个后台进程组。只有前台进程可以从终端接收输入,也只有前台进程才被允许向终端输出。

    1.2K10

    写个简单的项目自动部署脚本

    一、概述 在项目数量比较大和构建流程比较复杂的场景,我们一般会使用jenkins以及衍生产品来实现构建打包部署能力,但对于一些简单的项目和小众场景,我们使用简单的脚本构建部署,也未必不是一个简单便捷和节省成本的选择...我们以jenkins为例,其本质就是从远程仓库拉取代码,然后本地编译打包,然后上传到目标服务器执行启动命令,简化过程如下: 那么在一些简单的项目中,我们可不可以完全自己写一个脚本来做打包部署呢,答案是可以的...# 休眠10s,等待进程终止 sleep 10 #把maven编译打包的最新jar包拷贝到工作目录 cp target/springboot-demo-$1.jar $WORK_DIR #再次检查进程是否终止...,并发送kill执行进行终止服务进程,并且休眠10s,给服务进程足够的时间处理剩余的事情 从项目目录的target文件夹拷贝可执行jar到项目工作目录 再次检查服务进程是否已经终止,如果没有终止则强行终止...1.部署日志记录 将部署开始和结束的日志追加到部署日志中。

    43110
    领券