我有一个运行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的原因及如何处理?相关推荐

  1. 劫起|再谈Linux epoll惊群问题的原因和解决方案

    原作者:dog250,授权发布 重新整理: 极客重生 文章有点长,可以三连收藏慢慢看 缘起 近期排查了一个问题,epoll惊群的问题,起初我并不认为这是惊群导致,因为从现象上看,只是体现了CPU不均衡 ...

  2. linux服务器出现黄,linux服务器出现严重故障后的原因以及解决方法

    linux服务器出现严重故障后的原因以及解决方法 发布时间:2011-11-24 16:32:18   作者:佚名   我要评论 linux服务器出现严重故障后的解决方法,本文为大家介绍四个步骤解决l ...

  3. linux上TCP connection timeout的原因查找

    linux上TCP connection timeout的原因查找 好久没有写文章了, 今天解决了一个网络连接超时的问题, 记录以备查看. 最近在线上nginx经常出现输出connection tim ...

  4. linux的cache过高的原因定位与解决echo 3 > /proc/sys/vm/drop_caches

    先说结论解决办法: 一.在crontab定时执行echo 3> /proc/sys/vm/drop_caches清理缓存.治标不治本,过段时间缓存又会增加上来. 二.hcache -top 10 ...

  5. linux 系统速度慢,Linux运维人员你知道Linux系统运行速度太慢的原因吗?

    今天小编要跟大家分享的文章是关于Linux系统运行速度太慢的原因.相信正在从事Linux运维工作的小伙伴都会遇到过Linux系统运行速度过慢的问题,那遇到这种情况时,应该怎么解决呢?我们在搞清楚如何加 ...

  6. linux 执行命令特别慢,Linux运行速度太慢的关键原因全都在这了

    原标题:Linux运行速度太慢的关键原因全都在这了 我们在搞清楚如何加速Linux计算机之前,需要知道哪些方法可以帮助我们找到引导时启动的服务.以更高或更低优先级运行的进程.CPU运行状况.内存是否塞 ...

  7. linux重复文件管理,在windows下解压缩Linux内核源代码出现重复文件原因

    在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

  8. linux+死机+log+查看,Linux操作系统如何查找死机原因.doc

    Linux操作系统如何查找死机原因.doc Linux操作系统如何查找死机原因 How does the Linux operating system find the cause of death? ...

  9. 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)

    Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转] Posted on 2008-09-05 14:52 猫头鹰 阅读(84) 评论(0)  编辑 收藏 引用 所属分类 ...

最新文章

  1. 你应该知道的grep命令
  2. 如何用PyTorch进行语义分割?一个教程教会你|资源
  3. vCenter 部件关系简介 网络原理
  4. adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
  5. string数组批量转换成Int数组
  6. MySQL 之 explain
  7. python获取股票数据_python根据股票代码获取当前数据
  8. 平移刚体上各点的加速度和速度_大物学习笔记(一)——刚体力学
  9. Linux下rpm安装lrzsz
  10. Shell 脚本进程并发进程数控制
  11. HTML + CSS + JS知识点复习(第一次)
  12. 联想数据中心技术总监单奖定:双态IT -数字化转型下的IT建设新思路
  13. Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法
  14. ZYNQ BRAM_ctrl PS PL通信报错
  15. 网络加密流量的相关研究
  16. 将VBS脚本编译成加密版本的VBE脚本
  17. spring boot实现验证码登录
  18. N32926 24小时连续测试720p, h.264 IPCAM功能,为什么基本不发热呢?
  19. rabbitMQ无法访问web管理页面
  20. 斐讯K2刷固件(支持v22.4.2.15以上)

热门文章

  1. tomcat日志中出现乱码
  2. 一图读懂|H3C SecPath ACG1050-X1应用控制网关
  3. cisco2960开启snmp
  4. Android学习笔记之ListView与Item的焦点冲突处理
  5. Python IO编程——文件读写
  6. PHP中文字符串截取类
  7. 新买win8更换win7的方法步骤
  8. 新手网管升级之路(三)
  9. javascript中动态加载js、vbs脚本或者css样式表
  10. 34深入理解C指针之---通过字符串传递函数