Articles of Linux操作系统

我如何自动杀死一个Python使用太多内存的进程?

情况:我有一个网站,允许人们使用不同语言 (特别是我创build的esolang)执行任意代码, 在共享托pipe服务器上使用Python解释器。 我在一个单独的进程中运行这个代码,时间限制为60秒。 问题:你可以做一些像(Python等价物) 10**(10**10)这样的东西,它比我分配给我的内存消耗更多的内存。 它也显然locking了Apache – 或者响应时间太长 – 所以我必须重新启动它。 我已经看到这个问题 ,但给出的答案使用Perl,我根本不知道,因此我想在Python中的答案。 不过,操作系统也是 Linux。 具体来说,我想要以下特征: 自动运行 强制杀死任何超过内存限制(如1MB或100MB)的进程 杀死我的代码超过24小时的任何进程 我使用这段代码(在Django视图中)来创build进程并运行它( proxy_prgm是一个Manager,所以我可以从解释esolang代码的程序中检索数据): prgmT[uid] = multiprocessing.Process( target = proxy_prgm.runCatch, args = (steps,), name="program run") prgmT[uid].start() prgmT[uid].join(60) #time limit of 1 minute if prgmT[uid].is_alive(): prgmT[uid].terminate() proxy_prgm.stop() 如果你需要更多的细节,不要犹豫,告诉我要编辑什么(或者问我问题)。

m标志和o标志将被存储在Linux中

我想知道最近收到路由器广播的m标志和o标志的值。 从内核源代码,我知道m标志和o标志被存储。 /* * Remember the managed/otherconf flags from most recently * received RA message (RFC 2462) — yoshfuji */ in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED | IF_RA_OTHERCONF)) | (ra_msg->icmph.icmp6_addrconf_managed ? IF_RA_MANAGED : 0) | (ra_msg->icmph.icmp6_addrconf_other ? IF_RA_OTHERCONF : 0); . . . 然后我相信它必须能够使用ioctl或proc文件系统或任何其他方法来检索这些值。 任何人都可以请指出这一点。

Linux内核模块/ IOCTL:不适用于设备的ioctl

我正在编写一个作为伪驱动程序的Linux内核模块(LKM) – 我无法弄清楚如何在LKM( wait.c )和用户级程序( user.c )之间进行IOCTL调用)。 设备驱动程序的幻数是0xBF – LKM不与物理块/字符设备通信,这只是一个练习。 从我所知道的情况来看,调用KERN_IOCTL_CREATE_EVENT的IOCTL格式不正确,幻数也不正确。 我尝试使用的IOCTL调用是: #include <sys/ioctl.h> #define KERN_IOCTL_CREATE_EVENT _IOWR(WAIT_DEVICE_MAGIC, 1, int) int main(){ int ret; int fd; fd = open("/dev/wait", 0); if(fd < 0){ return -1; } ret = ioctl(fd, KERN_IOCTL_CREATE_EVENT, 0); 错误: [fail]: KERN_IOCTL_CREATE_EVENT: Inappropriate ioctl for device 用户模式应用程序可以打开/closures指向设备的文件描述符: /dev/wait但case / switch语句不接受IOCTL调用。 有什么build议么? 这是# uname -a的输出 […]

域套接字“sendto”遇到“errno 111,连接被拒绝”

我正在使用域套接字从另一个进程获取值,如A从B获得一个值,它运行好几个月。 但是最近,A在“发送”消息给B时偶尔出现“errno 111,连接被拒绝”的失败。 我检查了B域套接字绑定文件,它是存在的。 我也在另一台机器上做了一些testing,效果也不错。 那么,有没有人遇到过这个问题? 任何人都可以有一些线索在这种情况下可能是错误的吗? 非常感谢。

Godaddy主机上的CakePHP控制台

我一直在努力让我的CakePHP网站在Godaddy“网格托pipe”帐户上工作。 我的蛋糕应用程序安装在帐户的子目录中,可以通过子域访问。 我不得不调整我的.htaccess文件来使这个工作,现在我需要让CakePHP控制台在这个环境中工作。 我在Amazon EC2服务上托pipe的Ubuntu服务器上安装了相同的蛋糕应用程序。 基本上一个简单的Ubuntu LAMP安装程序。 CakePHP控制台在此环境中按预期工作。 当我尝试在Godaddy上运行控制台时,我收到以下消息: CakePHP控制台:此文件加载不正确,无法继续。请确保/ cake / console在您的系统path中,并检查手册是否正确使用此命令( http://manual.cakephp.org/)。 ) 我已经开始在cake / console / cake.php中添加一些debugging代码来了解发生了什么。 在godaddy网站上,当我在第183行回显print_r($this->args) ,发现数组是空的。 当我在我的Ubuntu EC2实例上这样做时,我得到这个: Array ( [0] => /var/www/www.directory.sdcweb.org/htdocs/cake/console/cake.php ) 它看起来像godaddy的命令行PHP不通过bash shell命令行参数。 有没有人有一些build议,我可能会得到CakePHP控制台上Godaddy的工作? 调用Cake shell的bash脚本包含以下内容 LIB=${0/%cake/} APP=`pwd` exec php -q ${LIB}cake.php -working "${APP}" "$@" exit; 我在想,修改这个脚本可能会解决这个问题。

在读取linux之前,获取串口上等待的字节数

我将一个Win32串口类转换成Linux(Ubuntu)这个串口类所要求的function之一就是在串口缓冲区中“偷看”,看看在串口读取串口前有多less字节在串口上等待。 在这种修脚的情况下,我只需要知道端口上是否有任何字节,然后再尝试读取它。 在Windows中,我使用COMSTATS,但我似乎无法在Linux中find类似的function。 我的问题是: 在Linux上如何读取在串口上等待的字节数量而不将它们从串口缓冲区中删除?

Python套接字库认为套接字是不是打开

我正在处理一些Python,看起来像这样: HOST = '127.0.0.1' PORT = 43434 single = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: single.bind((HOST, PORT)) except socket.error as e: # Print an error, exit. 虽然过去运行良好,但是现在我们已经得到错误[Errno 98] Address already in use 。 SIGINT处理程序closures套接字连接,所以我不确定它是如何得到这种状态,但现在我只是想解决它。 lsof和netstat都说没有使用该端口: [$]> sudo netstat -an | grep 43434 [$]> sudo lsof -i :43434 根据/proc/sys/net/ipv4/tcp_fin_timeout , TIME_WAIT被设置为60秒,但是在最后一次运行成功之后甚至几个小时都会发生错误。 我试过(暂时)设置REUSEADDR (通过single.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ),但似乎没有任何效果。 什么在tarnation是怎么回事? 我能够再次使用这个端口而不必重新启动机器吗?

XMonad:SpawnOn工作区,当按下spawn键时有焦点

我想我的程序产生的焦点,当它的键绑定被按下的屏幕上,而不是在当前聚焦完成加载的屏幕上。 为什么:我目前的设置是Arch Linux + XMonad,我有6台显示器。 我一直在使用XMonad大约一年,我唯一的问题就是需要一些时间打开的程序。 例如,我第一次启动铬需要3秒钟的时间来加载。 我按我的键绑定铬,然后去不同的屏幕做别的。 但是,当铬加载它加载在屏幕上,当前焦点不在屏幕上,当按下spawn键绑定时被关注。 我的haskell技能很好…不存在。 我之前已经在Lisp中编写过程,并花费了大量的时间在C,Python和JavaScript中,所以如果需要的话,我可以把它捡起来(所以请在haskell样本的答案中清楚一点)。 提前致谢。

Linux内核:自旋锁SMP:为​​什么在spin_lock_irq SMP版本中有一个preempt_disable()?

linux内核的原始代码是: static inline void __raw_spin_lock_irq(raw_spinlock_t *lock) { local_irq_disable(); preempt_disable(); spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock); } 我认为没有执行path可以抢占本地IRQ禁用后的当前path。 由于所有常见的硬中断禁止,不应该发生softirq,也没有打勾时间表轮。 我认为目前的道路是安全的。 那么为什么有一个preempt_disable()? 谢谢。

从生成文件运行可执行文件

嘿,我只是有一个关于makefile的快速问题。 有没有办法自动运行从生成文件生成的可执行文件? 就像如果我只是input“make”它将编译和构build并自动执行,所以我可以跳过额外的步骤./myExecutable 我在笔记里写下: run: prog1 ./prog1 但似乎没有工作。 谢谢