首页
学习
活动
专区
工具
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进程的方法。具体使用哪种方法取决于实际需求和场景。

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

相关·内容

如何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=$?

7800

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.6K31

Docker竟有这些不为人知bug

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

4K10

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

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

1.4K30

Linux基础之进程

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

63350

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

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

28320

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.1K31

《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

容器中一号进程

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

1.6K60

关于 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]-[~]

72430

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

2.9K30

【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...这样状态就像是张三是一个进程,一直在等待着李四进程运行结束结束了张三才能继续他自己原本事情。

5110

Linux 信号(Signal)

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

90310

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

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

18910

shell变量详解

变量存取原理 关于内存说明 a、系统启动 内存被按照1B一个单位划分成N块 并且以十六进制为每一个空间编号 b、内存跟踪表记录 使用未使用内存地址编号 c、内存申请 系统从未使用内存中拿出一个或者一段连续空间...运行脚本时: 2) 运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动shell, 另一个是系统为运行脚本程序创建shell。...当一个脚本程序运行完毕,它脚本shell将终止,可以返回到执行该脚本 之前shell。...当前进程中有效,其他进程及当前进程进程无效。 环境变量:当前进程有效,并且能够被子进程调用。 全局变量:全局所有的用户程序都能调用,且继承,新建用户也默认能调用....变量类型 作用域 生命周期 本地变量 当前shell环境(子shell不能用) 脚本结束或终端结束 环境变量 当前shell或者子shell 当前进程结束 全局变量 所有用户及shell环境 关机 内置变量

57220

Linux 学习笔记之超详细基础linux命令 Part 12

除了上述基本三种状态以外,Linux还描述进程以下状态 挂起状态:正在运行进程,因为某个原因失去了CPU而暂时停止运行 终止状态:进程已经结束 休眠状态:进程主动暂时停止运行 僵死状态...默认0 作业前后台切换 bg命令 格式:bg [作业号] 功能:将前台作业切换到后台运行。说若没有指定作业号,则将当前作业切换到后台。 备注:一个或多个相关进程可以形成一个作业。...,无选项时显示当前用户在当前终端启动进程 主要选项: -a(all) 显示当前终端上所有的进程,包括其它用户进程信息 -e 显示系统中所有的进程,包括其它用户进程系统进程信息 -l(list...) 显示进程详细信息,包括父进程号、进程优先级 -u(used) 显示进程详细信息,包括CPU内存使用情况 -x 显示后台进程信息[包括没有终端进程信息] -t 终端号 显示指定终端上进程信息...普通用户只能终止自己启动进程 主要选项: -9 当无选项kill命令不能终止进程时,可以-9强制终止进程 例子:假设某进程进程号为3357,终止进程 [laiyu@localhost ~

57020

SIGTERM:Linux 容器优雅终止(退出代码 143)

这使进程有机会在关闭之前完成基本操作或执行清理。目的是不管它是否成功结束,都要杀死进程,但是给它一个机会先清理进程。...如果一个进程正在等待网络或磁盘 I/O,而内核无法阻止它,它就会成为僵尸进程。需要重新启动才能从系统中清除僵尸进程。...僵尸进程特征是: 不再执行 没有分配系统空间 但是保留一个进程ID 僵尸进程会一直出现在进程表中,直到其父进程关闭或操作系统重新启动。...此时,在 pod 上运行容器并不会感知到这一变化。 preStop hook:这是一个特殊命令,在 pod 开始终止之前发送到 pod 中容器。您可以在容器中使用此 hook 来启动正常关闭。...请注意,即使处理了 preStop hook,您仍然需要测试并了解您应用程序如何处理 SIGTERM。对 preStop SIGTERM 冲突或重复反应可能导致生产问题。

10.9K20
领券