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

如何阻止SIGINT传递给python中的子进程?

阻止SIGINT传递给Python中的子进程可以通过以下方法实现:

  1. 使用signal库捕获SIGINT信号,并在子进程中忽略该信号。
代码语言:python
代码运行次数:0
复制
import os
import signal
import subprocess

def handle_sigint(signum, frame):
    pass

signal.signal(signal.SIGINT, handle_sigint)

# 创建子进程
child_process = subprocess.Popen(['python', 'child_process.py'])

# 等待子进程结束
child_process.wait()
  1. 使用os.setpgrp()将子进程放入新的进程组,使其不受父进程的信号影响。
代码语言:python
代码运行次数:0
复制
import os
import subprocess

# 将当前进程放入新的进程组
os.setpgrp()

# 创建子进程
child_process = subprocess.Popen(['python', 'child_process.py'])

# 等待子进程结束
child_process.wait()
  1. 使用nohup命令启动子进程,使其在父进程退出后继续运行。
代码语言:python
代码运行次数:0
复制
import subprocess

# 创建子进程
child_process = subprocess.Popen(['nohup', 'python', 'child_process.py'])

# 等待子进程结束
child_process.wait()
  1. 使用try-except语句捕获KeyboardInterrupt异常,并在子进程中忽略该异常。
代码语言:python
代码运行次数:0
复制
import subprocess

try:
    # 创建子进程
    child_process = subprocess.Popen(['python', 'child_process.py'])

    # 等待子进程结束
    child_process.wait()
except KeyboardInterrupt:
    pass

以上方法可以有效地阻止SIGINT信号传递给Python中的子进程。

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

相关·内容

python 在threading如何处理主进程线程关系

之前用python多线程,总是处理不好进程和线程之间关系。后来发现了join和setDaemon函数,才终于弄明白。下面总结一下。...1.使用join函数后,主进程会在调用join地方等待线程结束,然后才接着往下执行。...如果使用setDaemon函数,则与join相反,主进程结束时候不会等待线程。...这里设置主进程为守护进程,当主进程结束时候,线程被中止 运行结果如下: #python testsetDaemon.py This is the end of main thread. 3...秒 2019-10-06 14:17:25,671 【 7412 】 MainProcess 进程花费时间:2.9418249130249023秒 以上这篇python 在threading如何处理主进程线程关系就是小编分享给大家全部内容了

2.8K10

python 从subprocess运行进程实时获取输出

起因是这样,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做就是用python 获取c++程序...printf() 或cout 输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序标准错误输出重定向到了标准输出,以使我们可以直接从标准输出同时获取标准输出和标准错误信息...p.poll() 返回进程返回值,如果为None 表示 c++进程还未结束. p.stdout.readline() 从 c++标准输出里获取一行....参考文章1 pythonsubprocess.Popen()使用 参考文章 2 python 从subprocess运行进程实时获取输出

10.4K10
  • 如何在父进程读取(外部)进程标准输出和标准错误输出结果

    最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...但是,实际情况并不是我们想那么简单。比如我文前提到问题:别人提供了一个Console控制台程序,我们将如何获取其执行输出结果呢?...这个API参数非常多,我想我们工程对CreateProcess调用可能就关注于程序路径(lpApplicationName),或者命令行(lpCommandLine)。...它是我们启动进程时,控制进程启动方式参数。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。

    3.9K10

    Python程序创建进程时对环境变量要求

    首先,来看下面一段代码,在主进程重新为os.environ赋值,但在进程并不会起作用,进程中使用仍是系统全部环境变量。 ? 运行结果: ?...在Python,为变量重新赋值实际上是修改了变量引用,这适用于任意类型变量。对于列表、字典、集合以及类似的可变类型对象,可以通过一定形式改变其中元素引用而不改变整个对象引用。...os.environ是一个类似于字典数据结构,这里以字典为例,字典可以通过pop()、popitem()、clear()、update()以及下标赋值等原地操作方法或操作来修改其中元素而不影响字典对象引用...在主进程清空了所有环境变量,然后创建进程失败并引发了异常。...以Windows操作系统为例,创建进程时会调用API函数CreateProcessA,该函数要求环境变量至少要包含SYSTEMROOT,否则调用另一个函数CryptAcquireContext时会失败

    2.3K30

    如何Python 终止 Windows 上运行进程

    当深入研究Windows操作系统上Python开发领域时,无疑会出现需要终止正在运行进程情况。这种终止背后动机可能涵盖多种情况,包括无响应、过度资源消耗或仅仅是停止脚本执行必要性。...在这篇综合性文章,我们将探讨各种方法来完成使用 Python 终止 Windows 上运行进程任务。...方法3:释放“流程”模块力量 Python 进程”模块赋予我们生成新进程能力,与它们输入/输出/错误管道建立连接,并检索它们返回代码。...示例:利用“流程”模块 在这种情况下,我们将使用强大进程”模块演示记事本应用程序终止: import subprocess # The process name to be terminated...shell=True' 参数在 Windows 命令外壳执行命令时变得不可或缺。 结论 在这次深入探索,我们阐明了使用 Python 终止 Windows 上运行进程三种不同方法。

    50630

    Linux 信号

    除此之外,进程可以选择它想要处理信号,进程也可以选择阻止信号,如果不阻止,可以选择自行处理,也可以选择进行内核处理。如果选择交给内核进行处理,那么就执行默认处理。...操作系统会中断目标程序进程来向其发送信号、在任何非原子指令,执行都可以中断,如果进程已经注册了信号处理程序,那么就执行进程,如果没有注册,将采用默认处理方式。...此信号一种常见用法是指示操作系统在进程终止后清除其使用资源。 SIGCONT SIGCONT 信号指示操作系统继续执行先前由 SIGSTOP 或 SIGTSTP 信号暂停进程。...该信号一个重要用途是在 Unix shell 作业控制。 SIGFPE SIGFPE 信号在执行错误算术运算(例如除以零)时将被发送到进程。...SIGSTOP SIGSTOP 指示操作系统终止以便以后进行恢复时 SIGSYS 当 SIGSYS 信号将错误参数传递给系统调用时,该信号将发送到进程

    4.8K20

    PYthon signal总结

    当信号SIGUSR1被传递给进程时,进程从暂停恢复,并根据预设,执行SIGTSTP信号处理函数myHandler()。...实际上,Python 解释器是使用C语言来编写,所以有此相似性也并不意外。此外,在Python 3.4,signal包被增强,信号阻塞等功能被加入到该包。我们暂时不深入到该包。...Python多线程机制,只要利用signal模块就可以为耗时操作增加统一超时处理机制(当然在使用了多线程情况下还是有一些不一样地方,只有在主线程里面才可以调用signal.signal函数,而线程可以调用...发送信号一般有两种原因: 1(被动式)  内核检测到一个系统事件.例如进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号 2(主动式)  通过系统调用kill...实际上,SIGKILL和SIGSTOP信号是不能被屏蔽或阻止,他们默认动作总是会被执行 python多线程程序中断(信号)处理 http://www.162cm.com/archives/

    4.6K40

    Golang热重启

    这几天在写组里一个http框架,于是研究了下,在golang如何实现服务热重启,从而实现整个服务重启可以实现对请求客户端透明。...: 监听重启信号; 收到重启信号时fork进程,同时需要将服务监听socket文件描述符传递给进程进程接收并监听父进程传递socket; 等待进程启动成功之后,停止父进程对新连接接收;...其中child是进程标志,我们可以看到在进程分支,通过os.NewFile(3,"")打开了文件描述符为3文件并转为网络监听句柄(至于为什么是3呢,而不是0、1或者其他数字?...,通过系统调用exec.Command()创建了一个进程,同时传递了child参数到了进程,从而可以执行在进程监听时走进程创建socket流程。...这儿就回到了上文中我们抛出os.NewFile(3,"")3是如何问题了,cmdExtraFiles参数会将额外文件描述符传递给继承进程(不包括标准输入、标准输出和标准错误),在这儿父进程给了个

    4.5K82

    Qt下使用fork创建进程并使用socket通信

    之前在嵌入python解释器过程,我们没有处理这样一种情况:当Python解释器正在执行一个阻塞操作(比如socket server 在监听一个客户端连入),这时我们需要终止解释器运行,该如何操作呢...在Qt线程不容易实现该功能,如果在socket 监听时终止python解释器,那么再次运行时端口就会显示被占用,因为资源没有清理。为了解决这种情况,我们让解释器运行在一个进程。...简单介绍下程序主体构成:构造函数中使用c创建客户端,使用Qt类创建服务器。 界面点击start按钮时,使用fork创建进程,在进程客户端向服务器发送数据。...点击stop按钮时,父进程进程发出kill信号,由于进程注册了中断信号,所以会执行信号函数操作。...如果python解释器运行在进程,那么python解释器也会被中断,资源被清理故而不会被占用。Python重定向信息输出也可通过socket发送出来。 程序运行效果: ?

    1.7K30

    node创建服务进程

    那么,在node项目中,如何创建一个daemon进程呢?...下文中所有讨论都是在linux环境下进行。 实现一 在linux系统,父进程创建出进程,此时父进程若退出,此时进程则变为孤儿进程,其ppid变为1,即成为init进程进程。...之所以出现这种情况是由于node创建进程时默认会通过pipe方式将进程输出导流到父进程stream(childProcess.stdout、childProcess.stderr),提供在父进程输出进程消息能力...默认“ctrl+c”触发SIGINT信号,父进程接受信号后发送给进程,如果子进程存在SIGINT侦听函数,则会执行该函数,否则执行exit系统调用进程退出。...此时进程已经和其父进程属于两个session,因此父进程退出和中断信号不会传递给进程进程不会接受到父进程中断信号自然也不会退出。

    1.7K60

    Python | 面试必问,线程与进程区别,Python如何创建多线程?

    今天是Python专题第20篇文章,我们来聊聊Python当中多线程。 其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一些规约用法等等。...这里车间里流水线自然对应就是线程概念,这个模型很好地诠释了CPU、进程和线程之间关系。实际原理也的确如此,不过CPU情况要比现实车间复杂得多。...当我们执行Python时候启动线程名叫MainThread,通过线程名字我们可以做区分。args是会传递给target这个函数参数。...我们加上了join之后运行结果是这样: 这个就是我们预期样子了,等待线程执行结束之后再继续。 我们再来看第二个问题,为什么主线程结束时候,线程还在继续运行,Python进程没有退出呢?...总结 在今天文章当中,我们一起简单了解了操作系统当中线程和进程概念,以及Python当中如何创建一个线程,以及关于创建线程之后相关使用。

    1.1K20

    java检测tomcat宕机_Tomcat意外宕机分析

    后来通过google后了解到: shell在非交互模式下对后台进程处理SIGINT信号时设置是IGNORE。...因此这样的话,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程每个成员(假设后台进程也是父进程成员),那么终端随意ctrl-c就可能导致所有的后台进程退出,显然这样是不合理...不开启作业控制的话,脚本里后台进程可以通过设置忽略SIGINT信号来避免父进程对组成员传播,因为对它来说这个信号已经没有意义。...传递给bash进程后,bash会把SIGHUP传递给进程,并且对于其进程test.sh,bash还会对test.sh进程组里成员都传播一遍SIGHUP。...注: 如果把tail 打印这一行去掉,为什么Java进程也不会退出,我猜原因应该是,如果没有tail的话, Java进程就不是他们进程了,自然怎么操作都不会受影响。

    1.4K10

    Linux内核编程--进程通信信号

    SIGCHLD, Linux进程结束时,进程并未被完全销毁,因为父进程还要用它信息。...如果父进程没有处理SIGCHLD信号或者调用wait/waitpid()等待进程结束,就会产生僵尸进程。。...“未决”和“阻塞”区别: 信号 “未决” 是一种状态,指的是从信号产生到信号被处理前这一段时间。 信号 “阻塞” 是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。...每个进程都有一个阻塞集,创建进程进程将继承父进程阻塞集。...进程注销信号后,立即执行相应信号处理函数,执行完毕后,信号生命终止。 当进程接收到一个信号时,就需要把接收到信号添加 pending 这个队列

    2.9K20

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

    确定了是由signal引起之后,我疑惑变成了: 1) 为什么SIGINT (kill -2) 不会让tomcat进程退出?...这说明shell对signal_handler做手脚是在执行用户逻辑之前,也就是脚本在fork出进程时候就设置了。...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意...不开启作业控制的话,脚本里后台进程可以通过设置忽略SIGINT信号来避免父进程对组成员传播,因为对它来说这个信号已经没有意义。...把SIGHUP传递给bash进程后,bash会把SIGHUP传递给进程,并且对于其进程test.sh,bash还会对test.sh进程组里成员都传播一遍SIGHUP。

    4K10

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

    确定了是由signal引起之后,我疑惑变成了: 1) 为什么SIGINT (kill -2) 不会让tomcat进程退出?...这说明shell对signal_handler做手脚是在执行用户逻辑之前,也就是脚本在fork出进程时候就设置了。...因为默认如果采用父进程进程组ID,父进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程每个成员,假设后台进程也是父进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意...不开启作业控制的话,脚本里后台进程可以通过设置忽略SIGINT信号来避免父进程对组成员传播,因为对它来说这个信号已经没有意义。...把SIGHUP传递给bash进程后,bash会把SIGHUP传递给进程,并且对于其进程test.sh,bash还会对test.sh进程组里成员都传播一遍SIGHUP。

    1.1K10

    python 进程间通信(一) -- 信号基本使用

    引言 上一篇文章,我们看到了如何通过 multiprocessing 来创建进程。...通过 multiprocessing 实现 python进程 接下来我们来详细了解一下多个进程之间如何进行通信和同步。 2. 进程间通信 我们曾经介绍过 UNIX 环境多个进程如何相互通信。...在多进程环境,通过向另一个进程发送预定某个信号从而触发对于事件响应,这是最为简单一种进程间通信方式。...Python 也提供了信号处理模块 — signal,虽然 Python 信号处理远没有 UNIX 环境强大。 4....信号枚举 signal 包定义了各个信号名及其对应整数,比如: import signal print(signal.SIGABRT) print(signal.SIGINT) Python 中所用信号名与值都和上面列表

    1.6K10

    Linux下进程相关知识

    进程必须通过使用等待系统调用来确认进程终止,这是为了检查进程终止状态。...僵尸进程进程终止而父进程还没有调用wait时会发生什么? 我们仍然希望能够看到进程如何终止,因此即使进程完成了,内核也会将进程变成僵尸进程。...进程使用资源仍然被释放给其他进程使用,但是进程仍然有这个僵尸进程条目。僵尸进程也不能被杀死,因为它们在技术上是“死亡”,所以你不能使用信号来杀死它们。...僵尸进程太多可能是一件坏事,因为它们会占用进程表上空间,如果它被填满,就会阻止其他进程运行。 5. 信号 信号是对进程通知,告诉它发生了什么事情。 为什么有信号?...当一个信号由某个事件生成时,它被传递给一个进程,在传递之前它被认为处于挂起状态。

    1.4K50

    Go语言优雅关闭与重启

    go优雅关闭与重启背景后端服务程序在配置更新,程序修改后发布过程存在一些未处理完成请求,和当前服务为落地资源(缓存、记录、日志等数据),为了减少这种情况带来数据异常,需要有一种机制,在服务收到重启或者关闭信号同时进行一些数据收尾处理...对于优雅重启:不关闭现有连接(正在运行程序)新进程启动并替代旧进程进程接管新连接连接要随时响应用户请求,当用户仍在请求旧进程时要保持连接,新用户应请求新进程,不可以出现拒绝请求情况对于优雅关闭...监听信号收到信号时fork进程(使用相同启动命令),将服务监听socket文件描述符传递给进程进程监听父进程socket,这个时候父进程进程都可以接收请求子进程启动成功之后,父进程停止接收新连接...,等待旧连接处理完成(或超时)父进程退出,升级完成overseer是不同,主要是overseer加了一个主进程管理平滑重启,进程处理链接,能够保持主进程pid不变,与nginx类似。..., 一般情况下端口是不可以重复监听,所以这里就要需要使用比较特别的办法,从上面的代码来看就是读取监听端口文件描述符,并且把监听端口文件描述符传递给进程进程里从这个文件描述符实现对端口监听。

    1.7K30
    领券