linux 出现 ,Linux出现SIGSTOP的原因及如何处理?
我有一个运行bash脚本的Python脚本。我需要能够杀死bash脚本,如果它似乎是无限的,它也必须运行在chroot监狱,因为脚本可能是危险的。我用psutil.Popen()运行它,并让它运行两秒钟。如果它没有自然结束,我将SIGKILL发送给它及其所有可能的子对象。在
问题是,如果我由于超时执行而终止一个脚本并运行另一个脚本,主(Python)脚本将收到一个SIGSTOP。在我的本地机器上,我做了一个非常愚蠢的解决方案:Python脚本在启动时将它的PID写入一个文件,然后我运行另一个脚本,它每秒向存储在该文件中的PID发送SIGCONT。这有两个问题:它确实很愚蠢,但更糟糕的是它拒绝在服务器上工作-SIGCONT只是在那里什么都不做。在
顺序是:Python脚本运行一个响应监狱的bash脚本,bash脚本运行可能危险的和/或无限的脚本。这个脚本可能也有一些孩子。在
规范的相关部分:
主python脚本p = psutil.Popen(["bash", mode, script_path, self.TESTENV_ROOT])
start = time.time()
while True:
if p.status() == psutil.STATUS_ZOMBIE:
# process ended naturally
duration = time.time() - start
self.stdout.write("Script finished, execution time: {}s".format(duration))
break
if time.time() > start + run_limit:
children = p.children(recursive=True)
for child in children:
child.kill()
p.kill()
duration = None
self.stdout.write("Script exceeded maximum time ({}s) and was killed.".format(run_limit))
break
time.sleep(0.01)
os.kill(os.getpid(), 17) # SIGCHLD
return duration
在chroot中运行脚本(1美元是要在chroot监狱中运行的脚本,$2是监狱路径)
^{pr2}$
示例准备.sh脚本#!/bin/bash
echo asdf > file
我花了一些时间试图解决这个问题。我发现这个脚本(没有使用chroot jail来运行bash脚本)运行得非常好:import psutil
import os
import time
while True:
if os.path.exists("infinite.sh"):
p = psutil.Popen(["bash","infinite.sh"])
start = time.time()
while True:
if p.status() == psutil.STATUS_ZOMBIE:
# process ended naturally
break
if time.time() > start + 2:
# process needs too much time and has to be killed
children = p.children(recursive=True)
for child in children:
child.kill()
p.kill()
break
os.remove("infinite.sh")
os.kill(os.getpid(), 17)
我的问题是:为什么我要接收SIGSTOPs?是因为chroot监狱吗?在
有没有比运行“唤醒”脚本更好的方法来解决我的问题?在
谢谢你的建议。在
编辑:我发现,在我杀死一个超时脚本后运行第一个脚本时,我发现自己是sigstop。不管我是使用os.system还是psutil.Popen。在
EDIT2:我做了更多的调查,关键的一行是控制chroot监狱的bash脚本中的echo './prepare.sh' | chroot "$2"。现在的问题是,这到底是怎么回事?在
EDIT3:This可能是一个相关的问题,如果它对某人有帮助的话。在
linux 出现 ,Linux出现SIGSTOP的原因及如何处理?相关推荐
- 劫起|再谈Linux epoll惊群问题的原因和解决方案
原作者:dog250,授权发布 重新整理: 极客重生 文章有点长,可以三连收藏慢慢看 缘起 近期排查了一个问题,epoll惊群的问题,起初我并不认为这是惊群导致,因为从现象上看,只是体现了CPU不均衡 ...
- linux服务器出现黄,linux服务器出现严重故障后的原因以及解决方法
linux服务器出现严重故障后的原因以及解决方法 发布时间:2011-11-24 16:32:18 作者:佚名 我要评论 linux服务器出现严重故障后的解决方法,本文为大家介绍四个步骤解决l ...
- linux上TCP connection timeout的原因查找
linux上TCP connection timeout的原因查找 好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看. 最近在线上nginx经常出现输出connection tim ...
- linux的cache过高的原因定位与解决echo 3 > /proc/sys/vm/drop_caches
先说结论解决办法: 一.在crontab定时执行echo 3> /proc/sys/vm/drop_caches清理缓存.治标不治本,过段时间缓存又会增加上来. 二.hcache -top 10 ...
- linux 系统速度慢,Linux运维人员你知道Linux系统运行速度太慢的原因吗?
今天小编要跟大家分享的文章是关于Linux系统运行速度太慢的原因.相信正在从事Linux运维工作的小伙伴都会遇到过Linux系统运行速度过慢的问题,那遇到这种情况时,应该怎么解决呢?我们在搞清楚如何加 ...
- linux 执行命令特别慢,Linux运行速度太慢的关键原因全都在这了
原标题:Linux运行速度太慢的关键原因全都在这了 我们在搞清楚如何加速Linux计算机之前,需要知道哪些方法可以帮助我们找到引导时启动的服务.以更高或更低优先级运行的进程.CPU运行状况.内存是否塞 ...
- linux重复文件管理,在windows下解压缩Linux内核源代码出现重复文件原因
在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂 原因一.因为在Lin ...
- linux+死机+log+查看,Linux操作系统如何查找死机原因.doc
Linux操作系统如何查找死机原因.doc Linux操作系统如何查找死机原因 How does the Linux operating system find the cause of death? ...
- 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)
Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转] Posted on 2008-09-05 14:52 猫头鹰 阅读(84) 评论(0) 编辑 收藏 引用 所属分类 ...
最新文章
- 你应该知道的grep命令
- 如何用PyTorch进行语义分割?一个教程教会你|资源
- vCenter 部件关系简介 网络原理
- adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
- string数组批量转换成Int数组
- MySQL 之 explain
- python获取股票数据_python根据股票代码获取当前数据
- 平移刚体上各点的加速度和速度_大物学习笔记(一)——刚体力学
- Linux下rpm安装lrzsz
- Shell 脚本进程并发进程数控制
- HTML + CSS + JS知识点复习(第一次)
- 联想数据中心技术总监单奖定:双态IT -数字化转型下的IT建设新思路
- Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法
- ZYNQ BRAM_ctrl PS PL通信报错
- 网络加密流量的相关研究
- 将VBS脚本编译成加密版本的VBE脚本
- spring boot实现验证码登录
- N32926 24小时连续测试720p, h.264 IPCAM功能,为什么基本不发热呢?
- rabbitMQ无法访问web管理页面
- 斐讯K2刷固件(支持v22.4.2.15以上)