Articles of pipe理员

在Linux上最好的沙盒Apache方法

我的Apache运行在面向公众的Debian服务器上,对安装的安全性有点担心。 这是一个机器,主持几个空闲时间的爱好项目,所以我们没有谁使用这台机器真的有时间不断地观察上游补丁,保持安全问题等意识,但我想保持坏人出去,或者如果他们进来,把他们放在沙箱里。 那么什么是最好的,易于设置,易于维护的解决scheme? 在Debian上设置一个用户模式的linux sandbox很容易吗? 或者也许是一个chroot监狱? 我想从外面轻松访问sadbox内的文件。 这是对我来说非常清楚,我是程序员而不是系统pipe理员的那个时代之一。 任何帮助将非常感激!

访问Linux用户空间中的硬件寄存器

我想要写在Linux用户空间的OMAP3530硬件寄存器。 请find下面的代码。 Mmap返回错误: 内存映射失败。 错误-1 mmap:权限被拒绝 #include <stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #define BASE_ADDRESS 0x48050000 int main() { int mem; unsigned int *value; void *ptr; /* Open /dev/mem */ if ((mem = open ("/dev/mem", O_RDONLY | O_SYNC)) == -1) fprintf(stderr, "Cannot open /dev/mem\n"), exit(1); ptr = mmap (0, 8192, […]

Linux(或RedHat Linux)上的小块分配器可避免内存碎片

我知道在用户应用程序中有一个分配器,而不是在HP-UX 链接文本和Windows XP 低碎片堆上处理大量的小块分配。 在HP-UX上,可以调整分配器,在Windows XP上它认为小于16 K的块的大小很小。 我的问题是,我找不到在Linux上运行的用户程序的这种分配器的任何信息(实际上是RedHat Linux)。 如果有这样一个分配器,我真的想find它可以处理的最大块大小。 更新 我find了jemalloc( http://www.canonware.com/jemalloc/ )。 它处理小,大,巨大的块: http : //www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#size_classes 。

mmap系统调用中MAP_ANONYMOUS标志的用途是什么?

从man页, MAP_ANONYMOUS The mapping is not backed by any file; its contents are initialized to zero. The fd and offset arguments are ignored; however, some implementations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is specified, and portable applications should ensure this. The use of MAP_ANONYMOUS in conjunction with MAP_SHARED is only supported on […]

如果/何时取消分配的堆内存得到回收?

我一直在embedded式Linux系统上运行一夜的内存testing。 使用vmstat我已经观察到,随着时间的推移,空闲内存会稳步下降。 根据procfs中的一些分析,一个进程的堆栈大致以相同的速度增长。 我怀疑有内存泄漏,并在代码中发现了一些经常使用new和delete位置。 但是,我没有看到没有匹配delete调用的new调用。 我再次运行内存testing,今天早上通过以下调用清除了内存caching echo 3 > /proc/sys/vm/drop_caches vmstat中列出的可用内存下降到接近testing开始时的值。 内核是否定期回收未使用的堆页? 如果是这样,除了上面的那个,还有其他的时间呢? 空闲内存可能低于某个阈值时

如何在bash中导出系统范围环境variables

我需要从当前作用域之外的bash脚本中设置一个系统环境variables。 所以你通常会像这样输出环境variables: 导出MY_VAR = / opt / my_var 但是我需要环境variables在系统级别可用。 这可能吗?

将terminal光标返回到包装启用的行首

我正在写一个filter(在一个terminal输出的pipe道中),有时候需要“覆盖”刚刚发生的一行。 它的工作原理是将stdin传递给标准的字符,直到达到\n ,然后调用特殊的行为。 我的问题是如何回到行的开始。 我想到的第一件事是使用\r或ANSI序列\033[1G 。 但是,如果线条足够长,以便在terminal上进行包装(从而使其滚动),则这些只会将光标移回当前物理线路。 我的第二个想法是跟踪行的长度(从前\n )以来传递的字符数,然后多次echo \b 。 但是,如果行包含控制字符或转义序列(可能还有Unicode?),则会出错。 search所有特殊的序列,并用它来调整我的字符数,是否有一个简单的方法来实现呢?

Python多处理内存使用情况

我写了一个程序,可以总结如下: def loadHugeData(): #load it return data def processHugeData(data, res_queue): for item in data: #process it res_queue.put(result) res_queue.put("END") def writeOutput(outFile, res_queue): with open(outFile, 'w') as f res=res_queue.get() while res!='END': f.write(res) res=res_queue.get() res_queue = multiprocessing.Queue() if __name__ == '__main__': data=loadHugeData() p = multiprocessing.Process(target=writeOutput, args=(outFile, res_queue)) p.start() processHugeData(data, res_queue) p.join() 真正的代码(特别是'writeOutput()')要复杂得多。 'writeOutput()'只使用这些值作为它的参数(意思是它没有引用ifata) 基本上它将一个巨大的数据集加载到内存中并对其进行处理。 输出的写入委托给一个subprocess(它实际上写入多个文件,这需要很多时间)。 所以每当一个数据项被处理时,它就会被发送到subprocess槽res_queue,然后根据需要将结果写入文件。 subprocess不需要以任何方式访问,读取或修改由'loadHugeData()'加载的数据。 subprocess只需要使用主进程通过“res_queue”发送的内容。 […]

敏感的variables使用后明确清除/清零?

我注意到一些程序在使用后显式地清零敏感的内存分配。 例如,OpenSSL有一个方法来清除RSA密钥占用的内存: “释放RSA结构rsa。应该总是使用这个函数来释放RSA结构,因为它也通过首先清除内存来安全地释放子字段。 http://www.rsa.com/products/bsafe/documentation/sslc251html/group__COMMON__RSA__KEY__FUNCS.html#aRSA_free 如果任何(C / C ++)程序包含这样的敏感variables,是否应该像上面那样显式调零内存? (或者,记忆是一种偏执狂行为还是一种保护)? 另外,程序结束时,任何分配的内存最终都会分配给另一个程序。 在Linux系统上,在分配给另一个程序之前,内存是否被清理或消毒? 或者,第二个程序可以读取第一个程序的一些旧的内存内容吗?

自动杀死耗费太多内存的进程或在Linux上停止

我想要一个监视进程的“系统”,并在下列情况下终止进程: 该过程超出了一些内存要求 该过程在一段时间内不响应来自“系统”的消息 我认为这个“系统”可以像监测过程那样简单? 如何做到这一点的代码示例将是有用的。 我当然不反对这个问题的完全不同的解决scheme。