Articles of pipe理员

如何在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。

如何安装libpython2.7.so

我已经安装了Python 2.6.6 [17:50:21 root@data.dev:~]# which python /usr/local/bin/python 也Python 2.7.6在 [17:51:12 root@data.dev:~]# which python2.7 /usr/local/bin/python2.7 但是libpython2.7.so丢失 [17:48:52 root@data.dev:~]# locate libpython2.6.so /usr/lib64/libpython2.6.so /usr/lib64/libpython2.6.so.1.0 /usr/lib64/python2.6/config/libpython2.6.so [17:48:56 root@data.dev:~]# locate libpython2.7.so [17:49:02 root@data.dev:~]# 不知道如何解决这个问题。 谁能帮忙?

Java 8与Jetty在Linux内存问题

你能帮我解决以下问题吗? 语境: 我们正试图将我们现有的运行在Java6(Glassfish)上的应用程序迁移到Java8(在Jetty9上)。 之前,我们能够在Java7上成功迁移相同的设置(在jetty9上)。 但客户决定现在就用Java 8。 在这个过程中,我们遇到了一些内存问题,下面是细节: 问题描述: 启动Jetty服务器后,java进程的初始(RES)内存使用量约为5.5克。 在运行应用程序一段时间后,内存使用缓慢上升,并消耗机器上最大的可用物理内存(8g),最终导致服务器/系统崩溃。 这个问题只在linux环境下遇到。 在Windows环境中找不到这样的问题。 Profiler发现: 使用VisualVM和jconsole监视服务器。 在两个分析器中,JVM的内存(堆和非堆)使用率都低于分配的限制。 环境详情: Java Version : 8 Server : Jetty 9.2.10 OS : linux on a virtual machine(Linux version 2.6.32-279.14.1.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Tue Nov 6 23:43:09 UTC 2012 Java Options : -Xms3072M […]

Linux堆结构和malloc()和free()

我有一个Linux 2.6内核的Debian,我试图理解堆是如何工作/行为与malloc()和free() 。 我试图searchmalloc()和free()algorithm和堆结构,但我找不到任何有用的东西。 不幸的是,我对Linux和内存工作原理知之甚less,无法理解free()和malloc()的源代码。 这是一个示例代码: int main(int argc, char **argv) { char *a, *b, *c; a = malloc(32); b = malloc(32); c = malloc(32); strcpy(a, argv[1]); strcpy(b, argv[2]); strcpy(c, argv[3]); free(c); free(b); free(a); } 使用gdb并run AAAA BBBB CCCC我可以检查堆。 这是strcpys之后,但在frees之前的状态: (gdb) x/32x 0x804c000 0x804c000: 0x00000000 0x00000029 0x41414141 0x00000000 0x804c010: 0x00000000 0x00000000 0x00000000 0x00000000 0x804c020: 0x00000000 […]

如何从C ++ / Qt Linux应用程序中逐行读取FIFO /命名pipe道?

如何从C ++ / Qt Linux应用程序中逐行读取FIFO /命名pipe道? 今天我可以从Qt程序的fifo中打开和读取,但是我不能让程序逐行读取数据。 Qt读取整个文件,意味着等待“发件人”closures会话。 让我们以一些shell命令为例来展示我想要的应用程序。 先创build一个fifo mkfifo MyPipe 然后我们可以用猫从fifo读取 cat MyPipe 然后我们发送一些数据与另一只猫 cat > MyPipe 然后开始input一些东西,每次你input它就会到达读者。 然后用Ctrl + Dclosures它,双方结束。 现在,发送者很容易用QTextStream创build,你只需要在发送时刷新。 QFile file("MyPipe"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); for(int i=0; i<3; i++) { out << "Hello…: " << i << "\n"; out.flush(); sleep(2); } file.close(); 但是,然后写一个逐行阅读的小读者是我现在卡在哪里,我所有的Qt库的尝试结束了,我得到的数据,但直到发件人在fifo上使用file.close() 。 不是当他冲水时,就像我用猫读书时发生的那样。 像这样的例子: QFile […]

在现有代码中replace新内存分配器的最佳解决scheme是什么?

在过去的几天中,我已经获得了有关除标准malloc()之外的内存分配器的一些信息。 对于有很multithreading的应用程序来说,有些实现似乎比malloc()好得多。 例如,似乎tcmalloc和ptmalloc有更好的性能。 我有一个C ++应用程序,在许多地方同时使用malloc和new操作符。 我认为用ptmalloc等replace它们可能会提高它的性能。 但是我想知道在运行在Linux上的C ++应用程序中, new操作符是如何操作的? 它使用malloc或其他的标准行为吗? 在代码中用旧代码replacenew内存分配器的最好方法是什么? 有没有什么办法来覆盖的行为或new malloc或我是否需要逐一replace所有的电话?