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

与grep配合使用时,Python子进程调用卡住

当与grep配合使用时,Python子进程调用卡住可能是由于以下原因之一:

  1. 死锁:如果Python子进程调用与grep命令之间存在互相等待资源的情况,可能会导致死锁。这种情况下,可以通过检查代码中的锁使用情况,确保正确释放锁来解决问题。
  2. 缓冲区溢出:如果grep命令的输出量很大,而Python子进程没有及时读取并清空缓冲区,可能会导致子进程调用卡住。可以通过在子进程调用之前设置stdout的缓冲区大小,或者使用非阻塞IO来解决这个问题。
  3. 子进程异常:如果grep命令执行过程中发生异常,子进程可能会卡住。可以通过在子进程调用之前设置stderr的重定向,以便捕获并处理子进程的异常信息。
  4. 系统资源限制:如果系统资源不足,例如内存或文件描述符限制,可能会导致子进程调用卡住。可以通过增加系统资源限制或者优化代码逻辑来解决这个问题。

总之,当与grep配合使用时,Python子进程调用卡住可能是由于死锁、缓冲区溢出、子进程异常或系统资源限制等原因。解决这个问题的方法包括检查代码中的锁使用情况、设置合适的缓冲区大小、使用非阻塞IO、捕获并处理子进程的异常信息,以及增加系统资源限制或优化代码逻辑。

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

相关·内容

神奇的Java僵尸(defunct)进程问题排查过程

而此时java进程的父进程变为了1 sh分别有两个子进程 一个是java进程 一个是tail进程 start.sh启动的java进程的父进程是1 即init进程 start_tail.sh启动后...那么应该比较复现吧 修改了一个游戏服务器的启动脚本 默认是没有加tail 现在加上了tail -f 启动游戏服务器脚本 看到日志 启动成功 ctrl+c 退出tail 调用shutdown.sh 发现服务器顺利关闭...结论:竟然无法在游戏服务器复现 艰难的排查过程3-各种思考、查阅资料 首先从僵尸进程的产生原因入手,猜测是否是sh这个父进程没有调用waitpid去回收java进程。...进程的父进程是sh进程 sh进程有两个子进程 一个是java进程 一个是tail进程 直接ctrl+c 则sh进程和tail进程都结束 java进程的父进程变为了1 如果不ctrl+c 直接shutdown.../jstack都卡住了一样 只能ctrl+c退出 然后错误的操作就是使用kill -9 这个会把进程给干掉 但是因为父进程sh被暂停了 所以无法waitPid 执行进程的回收操作 从而导致java进程变为了僵尸进程

4.8K30

一次linux中定位c++程序运行异常的经历

线程创建不出来 猜测:go的程序都能创建出线程,但是c++的创建不出来,但是在 x86 可以,是不是什么 linux 系统限制? ? 正常表现 ?...部分线程卡住 我发现程序虽然正常运行,但是部分功能不正常,经过查看日志发现,有一个线程只执行了一半就卡住了。 经过查看日志可以定位出是哪个线程卡住,如果从日志看不出来也没关系。...可以使用 pstack 进程号 看一些进程堆栈。...查看进程 pid ps -ef |grep 进程名 使用 gdb 查看是否出现问题,两个重要命令 gdb attach {pid} #查看正在运行程序的栈 info thread #进入以后使用,查看线程信息...再次使用 pstree -p {pid} 查看,确实主线程,调用了 linux 命令卡住。 ? 查看此进程的线程树 接下来解决卡命令的问题 解决 1:加 timeout 处理空返回。

2.2K20

1.并发编程多进程(理论部分)

: 在UNIX中该系统调用是:fork,fork会创建一个进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件(在shell解释器进程中,执行一个命令就会创建一个进程) 在windows...2.不同的是:在UNIX中,进程的初始地址空间是父进程的一个副本,提示:进程和父进程是可以有只读的共享内存区的。但是对于windows系统来说,从一开始父进程进程的地址空间就是不同的。...六 进程的终止(了解) 正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess) 出错退出(自愿,python...八 进程的状态   tail -f access.log |grep '404'   执行程序tail,开启一个进程,执行程序grep,开启另外一个进程,两个进程之间基于管道'|'通讯,将tail的结果作为...这样保证CPU一直在工作 进程无关,是操作系统层面,可能会因为一个进程用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。

53430

Debug 一个在 uWSGI 下使用 subprocess 卡住的问题

搜索了一下发现没有 Python 的 binding,所以打算粗暴一些,直接在 HTTP 服务里面 fork 出来一个进程做测试,然后去处理 stdout,grep 出来延迟的数据。...去容器(应用运行在一个容器里面)看,发现 hping3 进程一直没有结束,像是卡住了。...后面我实在解决不了了,找了(大佬)同事帮忙,花了很多时间,找到以下事实: hping3 卡住了,发现 SIGTERM 结束不了它,只能 kill -9 然后发现 uwsgi 进程也有一样的行为了,只能...在上面的 图 1 中,卡住的 hping3 pid 是 4285,我们看下这个进程能否处理信号: root@vagrant:/home/vagrant# cat /proc/4285/status |...另外这个故事告诉我们,uWSGI 下 fork 出来的进程最好都默认信号不工作,虽然 core_id =0 是可以处理信号的,但是这个作为 uWSGI 本身回应信号的设计就可以。

95720

Python守护进程daemon实现

2、调用fork,然后使进程exit。这样做,使得当我们以./的shell命令启动守护进程时,父进程终止会让shell认为此命令已经执行完毕,而且,这也使进程获得了一个新的进程ID。...此外,让父进程先于进程exit,会使进程变为孤儿进程,这样子进程成功被init这个用户级守护进程收养。 3、调用setsid创建一个新会话。...这在setsid函数中有介绍,调用setsid,会使这个子进程成为(a)新会话的首进程,(b)成为一个新进程组的组长进程,(c)切断其控制终端的联系,或者就是没有控制终端。...总结守护进程编程规则 1.在后台运行,调用fork ,然后使进程exit 2.脱离控制终端,登录会话和进程组,调用setsid()使进程成为会话组长 3.禁止进程重新打开控制终端 4.关闭打开的文件描述符..._exit(1) # 进程, 由于父进程已经退出,所以进程变为孤儿进程,由init收养 '''setsid使进程成为新的会话首进程,和进程组的组长,原来的进程组、控制终端和登录会话脱离

7.1K30

Linux进程学习【进程状态】

阻塞 就是 进程 因等待某种条件就绪,而导致的一种不推进状态 通俗来说,阻塞 就是 进程 卡住了,原因就是缺少资源 比如在我们日常生活中,常常发生堵车,原因就是道路资源不够用了,车辆这个 进程 就需要原地等待...myProcess | grep -v grep .PHONY:clean clean: rm -r myProcess 通过 make catPI 指令调用 Makefile 中提前设定好的指令...进程,预防误杀现象 ️暂停 T 我们还可以使 进程 进入 暂停 T 状态 kill -19 PID 暂停进程 kill -18 PID 恢复进程 我们可以通过 kill -18 PID 使 进程...进程 在指定行暂停运行,此时 进程 处于 追踪暂停状态 t ️死亡 X 当进程被终止后,就处于 死亡 X 状态 死亡状态是无法在任务列表中观察到的,死亡 X 状态只是一个返回状态 ️僵尸 Z 死亡状态相对应的还有一个...父进程,此时 进程 会被OS领养 进程 的 父进程 变为 1号进程 进程 就变成了一个 孤儿进程 发出指令终止 父进程 假设 进程 不被 1号进程 领养 进程 退出时就会无人回收

19930

Tornado实现多进程多线程的HTTP服务

但是这里遇到一个问题,就是异步函数内一定不能有阻塞调用出现,否则整个IOLoop都会被卡住。这就要求彻底地去改造服务,将所有IO或是用时较长的请求都改造为异步函数。...另外一个瓶颈就是GIL限制了CPU的并发数量,因此考虑用进程的方式增加进程数,提高服务能力上限。...综合上面的分析,大致用以下方案: 1.通过进程的方式复制多个进程使进程中的只读页指向同一个物理页。 2.线程池。回避异步改造的工作量,增加IO的并发量。...其中concurrent.futures不属于tornado,是Python的一个独立模块,在python3中是内置模块,python2.7需要自己安装。 2.修饰符@run_on_executor。...也就是需要保证在fork进程之前IOLoop是未被初始化的。这个可以通过tornado.ioloop.IOLoop.initialized()函数来跟。

1.4K10

python并发编程之多进程理论部分

:内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉...同步异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。...在windows中,没有进程层次的概念,所有的进程都是地位相同的,唯一类似于进程层次的暗示,是在创建进程时,父进程得到一个特别的令牌(称为句柄),该句柄可以用来控制进程,但是父进程有权把该句柄传给其他进程...四 进程的状态 ail -f access.log |grep '404'   执行程序tail,开启一个进程,执行程序grep,开启另外一个进程,两个进程之间基于管道'|'通讯,将tail的结果作为...进程无关,是操作系统层面,可能会因为一个进程用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。   因而一个进程由三种状态 ?

75750

Linux nohup和&的使用说明,2>1&含义解释

Linux中nohup和&配合使用说明,以及使用时2>1& 的解释,还有Linux进程查询等命令 1.nohup和&后台运行 1.1 nohup 功能:不挂断运行命令 语法...如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。...退出状态:该命令返回下列出口值:      126: 可以查找但不能调用 Command 参数指定的命令。      ...常用命令:ps -aux a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分 通常nohup &配合使用,用于查看后台进程ID 配合 kill命令杀掉程序 常用命令...:ps -aux|grep test.sh| grep -v grep 注:grep -v grepgrep -v参数可以将grep命令排除掉 ?

11.2K20

深入Python进程编程基础——图文版

docker pull python:2.7 生成进程 Python生成进程使用os.fork(),它将产生一个进程。...fork调用同时在父进程和主进程同时返回,在父进程中返回进程的pid,在进程中返回0,如果返回值小于零,说明子进程产生失败,一般是因为操作系统资源不足。 ?...我们调用create_child方法多次就可以生成多个子进程,前提是必须保证create_child是在父进程里执行,如果是进程,就不要在调用了。...僵尸进程 在上面的例子中,os.kill执行完之后,我们通过ps -ef|grep python快速观察进程的状态,可以发现进程有一个奇怪的显示 root 12...waitpid(pid, 0)还可以起到等待进程结束的功能,如果子进程不结束,那么该调用会一直卡住

77310

深入Python进程编程基础

docker pull python:2.7 生成进程 Python生成进程使用os.fork(),它将产生一个进程。...fork调用同时在父进程和主进程同时返回,在父进程中返回进程的pid,在进程中返回0,如果返回值小于零,说明子进程产生失败,一般是因为操作系统资源不足。...我们调用create_child方法多次就可以生成多个子进程,前提是必须保证create_child是在父进程里执行,如果是进程,就不要在调用了。...僵尸进程 在上面的例子中,os.kill执行完之后,我们通过ps -ef|grep python快速观察进程的状态,可以发现进程有一个奇怪的显示 root 12...waitpid(pid, 0)还可以起到等待进程结束的功能,如果子进程不结束,那么该调用会一直卡住

52520

Python实现守护进程

大致流程如下: 后台运行 首次fork,创建父-进程使进程退出 脱离控制终端,登录会话和进程组 通过setsid使进程成为process group leader、session leader...禁止进程重新打开控制终端 二次fork,创建-孙进程使sid不等pid 关闭打开的文件描述符 通常就关闭STDIN、STDOUT和STDERR 改变当前工作目录 防止占用别的路径的...working dir的fd,导致一些block不能unmount 重设umask 防止后续进程继承非默认umask造成奇怪的行为 处理SIGCHLD信号 非必需 日志 输出重定向后...第一次fork,setsid之后,进程成为session leader,进程可以打开终端;第二次fork产生的进程,不再是session leader,进程则无法打开终端。...管理进程,具体可看 Supervisor安装配置 参考 tzuryby/daemon.py python2实现的通用的python daemon类 12.14 在Unix系统上面启动守护进程 python3

1.2K20

【Linux】进程状态

启动了太多的程序相当于启动了太多的进程,操作系统在用你的cpu调度时,调度不过来了,当前正在调度的在运行,没有调度的相当于卡了 阻塞就是进程卡住了 2. 为什么要阻塞?...,从而使进程链接到网卡设备队列的尾部,造成阻塞 从而使CPU调用其他进程 ---- 若系统中内存的资源特别紧张,把占有内存的并且闲置的数据和代码,交换到磁盘当中,把内存中这部分的代码和数据释放,当该进程等待的资源就绪时...,若内存资源特别紧张,操作系统就想要把这个阻塞状态的进程干掉,可是此时磁盘依旧还在写入数据,这样做就会使磁盘写入数据失败,最终就会使100MB的数据丢失 若该进程的休眠状态为D状态,使操作系统无法干掉进程...S+ 当使用 kill - 9 +PID值将进程干掉后,再次使用指令查询进程,发现进程为僵尸状态,父进程为S+ 僵尸状态危害 在父子进程中,若父进程一直不读取,进程就会处于Z状态 在父子进程中,若进程一直处于僵尸状态...(即退出进程,但不回收进程),就会在内存中一直保留该进程 若父进程创建多个子进程,就是不回收,就会造成内存资源的浪费

6.1K30

Greenplum常见问题的分析处理

, gpbackup等 4、如需要更详细的日志,可以使用verbose参数,如:gprecoverseg -v , gpcheckcat -v -A , gpstate -e -v 5、工具内部调用命令日志...- 查看是否有很多starting_up的postgres进程 ps -ef|grep postgres | grep start 可以用kill ( 不能使用kill -9 )杀掉这些进程,确认是否释放部分可使用的链接...gpssh 也会卡住,首先排查那台机器ssh有问题 - gpssh 连通所有服务器后,先查看每台启动postgres进程数据量 gpssh -f allhosts “ps -ef|grep postgres...|grep -v grep | wc -l ” 3、对启动进程数明显减少的服务器,ssh到服务器上进行更详细的检查 - 排查服务器状态,检查文件系统,内存等是否正常,检查文件系统使用率 - 到/...类似的问题,/tmp/空间满,配置文件中有错误,OS参数问题等 - 如果一次操作恢复的实例比较多时,在primarymirror之间建立数据复制连接时,有可能会超时 - 如果系统表元数据有问题,也有可能导致实例启动失败

2.7K30

如何查看并杀死僵尸进程

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程....在fork()/execve()过程中,假设进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待进程结束,又没有显式忽略该信号,则进程成为僵尸进程...或者使用下面的命令: ps -ef | grep defunct | grep -v grep | wc -l 如何杀死僵尸进程呢? 一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。...’^[Zz]‘ | awk ’{print $2}’` 当然您可以自己编写更好的shell脚本,欢迎大家分享。...这一点BSD4不同,BSD4下必须显式等待进程结束才能释放僵尸进程 或者 用两次fork(),而且使紧跟的进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程

3.7K40

Greenplum常见问题的分析处理

gpcheckcat, gpbackup等 4、如需要更详细的日志,可以使用verbose参数,如:gprecoverseg -v , gpcheckcat -v -A , gpstate -e -v 5、工具内部调用命令日志...- 查看是否有很多starting_up的postgres进程 ps -ef|grep postgres | grep start 可以用kill ( 不能使用kill -9 )杀掉这些进程,确认是否释放部分可使用的链接...gpssh 也会卡住,首先排查那台机器ssh有问题 - gpssh 连通所有服务器后,先查看每台启动postgres进程数据量 gpssh -f allhosts “ps -ef|grep postgres...|grep -v grep | wc -l ” 3、对启动进程数明显减少的服务器,ssh到服务器上进行更详细的检查 - 排查服务器状态,检查文件系统,内存等是否正常,检查文件系统使用率 - 到/<User_home_directory...类似的问题,/tmp/空间满,配置文件中有错误,OS参数问题等 - 如果一次操作恢复的实例比较多时,在primarymirror之间建立数据复制连接时,有可能会超时 - 如果系统表元数据有问题,也有可能导致实例启动失败

3.6K70

如何查看并杀死僵尸进程

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程....在fork()/execve()过程中,假设进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待进程结束,又没有显式忽略该信号,则进程成为僵尸进程...或者使用下面的命令: ps -ef | grep defunct | grep -v grep | wc -l 如何杀死僵尸进程呢? 一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。...’^[Zz]‘ | awk ’{print $2}’` 当然您可以自己编写更好的shell脚本,欢迎大家分享。...这一点BSD4不同,BSD4下必须显式等待进程结束才能释放僵尸进程 或者 用两次fork(),而且使紧跟的进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程

4.7K10

Django+Vue项目学习第八篇:Django项目部署到服务器

之前的数据构造平台一直是在本地进行开发&运行,其他人通过访问我的本机地址来访问系统 通过这段时间的运行,发现几个不方便的地方: 1、每次重新开机连接wifi后,电脑的ip地址就变了,一方面需要修改前后端调用时填写的请求...R+ 13:44 0:00 grep --color=auto python3 当查询python进程时,查到了3个,实际上只需要5580那个进程,所以需要过滤 [root@ALI-PRD00370...Sl 11:44 0:58 /bin/python3 manage.py runserver 0:8000 第一个grep后面跟的是5580对应的进程名/bin/python3;后面的grep...-v grep,表示去掉包含grep进程,这样就只剩下我们需要的了 查到进程id后,使用kill命令杀掉进程 [root@ALI-PRD00370-APP-D2 DataFactory]# kill...]# ps -aux | grep /bin/python3 |grep -v grep |awk '{print$2}' 24896 然后再借助xargs命令,把捕获到的进程id传给kill [root

1.6K20

Python面试题大全(二):python高级语法

上述问题产生的原因是python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。因此,当任何由multipliers()返回的函数被调用时,i的值将在附近的范围进行查找。...阻塞: 如果卡住调用者,调用者不能继续往下执行,就是说调用者阻塞了。 非阻塞: 如果不会卡住,可以继续执行,就是说非阻塞的。 同步异步相对于多任务而言,阻塞非阻塞相对于代码执行而言。...僵尸进程进程使用fork 创建进程,如果子进程退出,而父进程并没有调用wait 获waitpid 获取进程的状态信息,那么子进程进程描述符仍然保存在系统中的这些进程是僵尸进程。...避免僵尸进程的方法: 1.fork 两次用孙子进程去完成进程的任务 2.用wait()函数使进程阻塞 3.使用信号量,在signal handler 中调用waitpid,这样父进程不用阻塞 118....python进程线程的使用场景?

1.7K20
领券