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

如何在我的python脚本关闭并重启后恢复子进程?

在Python脚本中关闭并重启后恢复子进程可以通过使用multiprocessing模块来实现。multiprocessing模块提供了创建和管理子进程的功能。

首先,我们需要导入multiprocessing模块,并创建一个子进程对象。然后,我们可以使用start()方法启动子进程。

代码语言:txt
复制
import multiprocessing

def child_process():
    # 子进程的逻辑代码
    print("子进程启动")

if __name__ == '__main__':
    # 创建子进程对象
    p = multiprocessing.Process(target=child_process)
    # 启动子进程
    p.start()

接下来,我们可以使用terminate()方法关闭子进程。这个方法会发送一个终止信号给子进程,使其立即停止运行。

代码语言:txt
复制
p.terminate()

如果我们希望在关闭子进程后重新启动它,可以使用join()方法等待子进程结束,并使用start()方法重新启动子进程。

代码语言:txt
复制
p.join()
p.start()

完整的代码如下:

代码语言:txt
复制
import multiprocessing
import time

def child_process():
    # 子进程的逻辑代码
    print("子进程启动")
    while True:
        print("子进程运行中...")
        time.sleep(1)

if __name__ == '__main__':
    # 创建子进程对象
    p = multiprocessing.Process(target=child_process)
    # 启动子进程
    p.start()

    # 等待子进程运行一段时间
    time.sleep(5)

    # 关闭子进程
    p.terminate()
    # 等待子进程结束
    p.join()

    # 重新启动子进程
    p.start()

这样,当我们关闭并重启Python脚本时,子进程会被恢复并继续运行。

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

相关·内容

DevOps: 进程管理工具 supervisor简介

一、简介 Supervisor是用Python 开发的一个client/server服务,是 Linux /Unix系统下的一个进程管理工具,不支持Windows系统。...它可以很方便的监听、启动、停止、重启一个或多个进程。...用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。...二、安装部署配置 1、安装 Supervisort是基于python开发的,需要检测系统是否具有python2.4以上的版本。一般centos7的系统都是基于python2.7以上了。...,并标准输出到对应设置的日志文件中 3、测试终止进程 通过以上操作,可以看到supervisor可以进行进程的管理,当托管进程意外关闭后,也会重启托管的进程。

14310

自动化测试之进程管理

在之前的一篇文章《终端自动化测试探索之路》中提到过当发生断电等情况,服务器重启之后如何快速恢复自动化服务,这里针对这个问题具体讲讲我的实现方式。...方案选型 基于上述原因,我考虑采用supervisor来管理这些进程,supervisor是一个UNIX-like系统上的进程管理工具,是一个由Python开发的c/s系统,可以管理和监控unix上面的进程...当这个进程挂掉的时候,linux是不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启的脚本,而supervisor则可以完美的解决这些问题。...被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息,所以当然也就可以对挂掉的子进程进行自动重启操作,当然重启还是不重启,还要看你的配置文件里面有没有设置autostart...3、进程组 supervisor可以对进程组进行统一管理,也就是说我们可以把需要管理的进程写到一个组里面,然后把这个组作为一个对象进行管理,如启动、停止、重启等操作。

33920
  • pm2:在生产环境中运行 nodejs 应用

    另外,pm2 stop all 会关闭所有应用进程。 restart、reload、delete 也相同。...重启应用 pm2 restart 重载应用 pm2 reload restart 和 reload 的区别是: restart 会同时杀死和重启所有相关进程...reload 的话则是一个个销毁和重启进程,保证至少一个进程可用,做到 零停机部署(Zero downtime deployments)。...是的,你也可以换成 /usr/bin/python 执行 python 脚本; env:对象,注入环境变量; instances:实例数量; out_file:普通日志输出文件 error_file:错误日志输出文件...max_memory_restart:内存达到指定大小后重启服务,处理内存溢出的情况; 更具体请看官方文档: https://pm2.keymetrics.io/docs/usage/application-declaration

    1.1K30

    supervisor添加进程_monitor进程

    supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。...用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。 1....startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected...,是否向这个进程组发送stop信号,包括子进程 killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程 ;包含其它配置文件 [include] files...3、启动后不见报错,什么报错也看不到,supervisor已经启动但是我们要启动的进程也没有启动 查看配置文件里的 stdout_logfile 配置,自行创建文件并指定日志路径到文件

    51710

    Redis持久化机制详解

    如果持久化方案做的很好,即使Redis宕机,也可以快速重启并恢复数据,重新回到可用状态。 二....子进程尝试将数据dump到一个临时的rdb文件中。 rdb快照文件生成后,用新的文件替换旧的dump.rdb。 一些细节 每个Redis进程,同一时刻只会存在一个dump.rdb文件。...auto-aof-rewrite-min-size 64mb rewrite 执行流程 Redis fork子进程 子进程基于当前Redis内存中的数据,构建日志,创建一个新的临时的AOF文件并执行写入操作...Redis主进程会继续接收客户端的写请求,将日志写入内存,同时也会写入旧的AOF文件。 子进程写完新的AOF文件后,主进程会将这段时间内内存中生成的新日志追加到新的AOF文件中。...如果是redis进程所在机器挂掉,那么重启机器后,尝试重启redis进程,直接基于AOF日志文件进行数据恢复。如果AOF文件有破损,可以通过redis-check-aof脚本进行修复。

    41330

    2024年3月份最新大厂运维面试题集锦(运维15-20k)

    内核初始化并启动init进程。 init进程根据配置(如SysVinit的/etc/inittab,systemd的systemd目标或Upstart的作业)启动服务。 最终用户登录系统。 22....在脚本中检查并使用可用的命令和工具的版本。 使用条件语句处理不同环境中可能的差异。 72. 解释什么是子Shell以及如何在Shell脚本中创建它。...答案: 子Shell是当前Shell的一个独立副本,它继承了父Shell的环境(变量等),但任何在子Shell中做出的更改(如变量赋值)不会影响父Shell。...如何在Shell脚本中实现并发和并行执行? 答案: 在Shell脚本中,可以通过在命令后添加&符号来实现并发执行。这会使命令在后台执行。使用wait命令可以等待所有后台进程完成。...解释如何在Shell脚本中处理文件和目录。 答案: Shell脚本提供了多种处理文件和目录的命令,如cp(复制)、mv(移动)、rm(删除)、mkdir(创建目录)等。

    3.1K10

    Supervisor使用详解

    一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。...也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。...startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected...如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisord.d/test.conf): #项目名 [program:blog] #脚本目录 directory=/opt/bin #脚本执行命令...,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。

    73620

    Linux后台运行程序最实用的两种方式

    场景1:我用xshell通过 telnet/ssh 远程登录服务器,跑脚本或执行一些耗时较长的任务,有时会因为网络不稳定或手贱等原因断开我的控制终端(如:xshell、sourceCRT)的远程连接状态...场景2:我需要长时间稳定的跑脚本,希望能在Linux后台跑,关掉xshell也没事,且随时可以回来看输出信息或操作。   如果你曾被这类问题困扰过,或现在正为此发愁?那么请往下看。...我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程(包括sshd及其子进程)。...相当于我们可以用xshell打开多个连接(session),不用时可以将这些连接置为离线状态 - Detached,离线状态下session中的程序会正常运行,也就是后台运行,并随时可以恢复继续使用,恢复使用时为...bash 是 sshd 的子进程,当 ssh 断开连接时,HUP 信号自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程),杀掉所有子进程。

    3.5K21

    Supervisor进程管理工具快速入门与使用

    Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启还能通过网页端进行控制; 官方网站:http://supervisord.org.../ 应用场景: 脚本需要通过后台进程运行且保证异常中断后重启服务, 原理: 它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中...,如启动,停止,重启等等操作; 集中式管理: supervisor管理的进程,进程组信息,全部都写在一个ini格式的文件,而且supervisor提供了一个web界面 有效性:当supervisor的子进程挂掉的时候...=unexpected ;#设置子进程挂掉后自动重启的情况,当程序exit的时候,这个program不会自动重启,默认unexpected #有三个选项,false,unexpected和...[include] files = conf.d/*.ini 子进程管理配置文件示例 如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisor/conf.d/test.conf):

    1K11

    Supervisor | 笔记

    startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected.../*.conf 子进程配置文件说明 给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/目录下, 以.ini作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起...如任意定义一个和脚本相关的项目名称的选项组( /etc/supervisord.d/test.conf ) # 项目名 [program:blog] # 脚本目录 directory=/opt/bin...# 脚本执行命令 command=/usr/bin/python /opt/bin/test.py # supervisor启动的时候是否随着同时启动,默认True autostart=true #...当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。

    1.1K20

    Mac环境下使用supervisor

    第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本,而supervisor则可以完美的解决这些问题。...那supervisor是如何实现进程管理并重启的呢?其实supervisor管理进程,就是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。...第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启操作,当然重启还是不重启,还要看你的配置文件里面有木有设置...3,进程组 supervisor可以对进程组统一管理,也就是说咱们可以把需要管理的进程写到一个组里面,然后我们把这个组作为一个对象进行管理,如启动、停止、重启等等操作。...Supervisord:主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。

    95430

    【玩转Redis面试第3讲】一次性将Redis RDB持久化和AOF持久化讲透

    (2)自动触发 自动触发对应bgsave命令,Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。...bgsave工作机制 图片 (1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进 程,如RDB/AOF子进程,如果存在,bgsave命令直接返回。...(4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。...(3)加载AOF/RDB文件成功后,Redis启动成功。 (4)AOF/RDB文件存在错误时,Redis启动失败并打印错误信息。...RDB 在保存 RDB 文件时父进程唯一需要做的就是 fork 出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他 IO 操作,所以 RDB 持久化方式可以最大化 Redis 的性能。

    746147

    如何优雅的在Windows上跑Shell脚本

    前言 我喜欢Shell脚本,格式方便阅读,方便调试。 在Windows上的Bat脚本,相对没那么友好,至少对我来说是这样的,还有一个致命的原因就是不方便调试……这点比较致命。...下面就谈谈我的经历: 起因 我们有一台边界 FTP,经常会异常中断,重启 FTP 即可; 为确保数据能有效传输,FTP 异常后能及时恢复,所以这个计划就产生了; ---- 环境 Windows server...,每 10 分钟运行一次 ftp_check.sh 脚本; 记录相关日志到 ftp_check.log ; ---- 代码实现 首先去 Mobaxterm 官网下载最新版,并拷贝到 Windows server...服务器中; 运行 Mobaxterm,并开启一个会话-Shell,类型选择 Bash; 在新开的会话中编写 shell 脚本 ---> ftp_check.sh 代码如下仅供参考; #!...和Windows换行符不一样导致) 万能的 Mobaxterm,只要你敢想,它就能去完成,比如说运行 Python(需要单独下载 Python插件)

    2.1K60

    实验(十)任务管理、进程管理

    解释运行脚本,脚本名称后加上 & 参数使程序在后台运行(而非采取默认的前台运行方式): bash test.sh & 程序运行后,每打印一个数字,都会暂停一秒。...例如, vi a.sh & 命令会启动vi程序,并在后台运行,通过 jobs 命令可以看到此任务处于挂起(suspend)状态: 图片 运行fg命令,带有+号的任务会恢复到前台运行,恢复后可以照常使用vi...解释运行脚本,按 Ctrl Z 中止(暂停)该进程并放入后台,然后用job命令查看后台的任务。 图片 使用fg命令将后台暂停的任务恢复到前台运行。 再次按 Ctrl Z 中止该进程并放入后台。...86,自己用命令的时候要改成上一步看到的PID 执行top命令,并使其在后台运行,可以通过 jobs 命令看到多出了一条新的任务记录,显然是top命令对应的任务: 图片 使用 fg 命令恢复带“+”号的...图片 (4)使用kill命令终止httpd的一个子进程(668号进程) kill 668 图片 (5)重启httpd的主进程(注意参数是阿拉伯数字1) kill -1 663 图片 (6)使用 killall

    1.3K30

    Linux系统初始化进程及文件(带命令)

    init进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程,反过来说,init进程是这些进程的父进程,当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去...stop(停止),终止指定的系统服务程序,关闭相应的功能, restart(重启),先退出,再重新运行指定的系统服务程序。...重启操作了,命令如下 [root@localhont -]# init 0   /关闭当前系统 [root@localhoat -]# init 6   /重启当前系统 而运行级别0.6 又分别对应着...各自的作用是什么? 如何控制开机后自动运行的系统服务,以减少资源占用、提高系统运行效率呢?...(根据主机的实际功能需求) ---- 2.优化开机自动加载的服务 Linux操作系统在每次开机后会进入默认的ysterd运行目标(如字符模式或图形模式),并运行 该目标中默认设为启动的各种系统服务,

    40530

    什么?终止一个容器竟然用了 10 秒钟,这不能忍!

    作为一名系统重启工程师(SRE),你可能经常需要重启容器,毕竟 Kubernetes 的优势就是快速弹性伸缩和故障恢复,遇到问题先重启容器再说,几秒钟即可恢复,实在不行再重启系统,这就是系统重启工程师的杀手锏...有以下几种可能性: 容器中的进程没有收到 SIGTERM[1] 信号。 容器中的进程收到了信号,但忽略了。 容器中应用的关闭时间确实就是这么长。...init 以守护进程方式存在,是所有其他进程的祖先。 它主要负责: 启动守护进程 回收孤儿进程 将操作系统信号转发给子进程 1....如果 PID 1 是 init 进程 - 那么 PID 1 会将 TERM 信号转发给子进程,然后子进程开始关闭,最后容器终止。...要想解决这个问题,就要往脚本中添加信号处理代码,让它捕获到 SIGTERM 信号时就终止进程: #!

    98820

    Redis的持久化机制

    1.2 数据库持久化策略 数据库不关心故障 而是在数据文件损坏后从数据备份或快照中恢复 RDB 就是这种情况 数据库使用操作日志记录每个操作的操作行为 以在失败后通过日志恢复一致性。...设置 redis.conf 再使用脚本初始化 500w 数据,等待后发现已经落盘: bgsave bgsave 可由 客户端显式触发 配置定时任务触发 当有主从架构时,从服务器向主服务器发送...子进程提交完成后,会立即给客户端返回响应,备份操作在后台异步执行,期间不会影响Redis的正常响应。...保持高性能,因为Redis主进程只要fork一个子进程,让子进程执行RDB 启动效率高 相对于AOF,直接基于RDB文件重启和恢复Redis进程,更加快速 2.6 RDB缺点 耗时 O(n) 写时复制...当父进程要更改其中某片数据时(如执行一个写命令),os会将该片数据复制一份以保证子进程数据不受影响,所以新的 RDB 文件存储的是执行 fork 一刻的内存数据。 不可控 容易丢失数据。

    45330

    一文详细揭秘 Redis 持久化,了解一下?

    对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。...与AOF相比,在恢复大的数据集的时候,RDB 方式会更快一些。 ? 当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作: Redis 调用forks. 同时拥有父进程和子进程。...子进程将数据集写入到一个临时 RDB 文件中。 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。...分析对比两种方式并做了测试后,发现这是两种不同风格的持久化方式,那么应该如何选择呢?...保存后重启 Redis 服务,密码持久化即生效。

    48820

    supervisor简单使用

    介绍 Supervisor 是用Python开发的一套通用的进程管理程序,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。...能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启,用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能...=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false...,是否向这个进程组发送stop信号,包括子进程 killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程 下面我们以nginx为例,来配置一下Nginx的守护进程...restart nginx: 重启nginx supervisorctl update :配置文件修改后可以使用该命令加载新的配置 supervisorctl reload: 重新启动配置中的所有程序

    51220
    领券